has-a による委任
典型的な実装として、has-a の関係にすることが考えられます。
public class Concrete1 : IFoo { public Concrete11() { impl_foo = new FooImplement(this); } #region IFoo interface implementation public int foo { // FooImplement クラスへ委任します get { return impl_foo.foo; } set { impl_foo.foo = value; } } : #endregion }
こんなかんじですね。IFoo の実装が Concreate1 から完全に分離できているならば、引数の this は必要ないでしょうし、FooImplement のインスタンスも作成せずに実装を static method の呼び出しにすることも可能です。(当然、this をパラメータとする static method というパターンもあり)
この方法には特に問題はないのです、Java等でも使われています。しかし、この方法で実装するインターフェスが IFoo 1つだけではなく、このような実装を行うクラスが Concrete1 1つだけではなかったとしたら……この手法は非常に大量のコピペを必要とします。