ジェネリック値を定義するジェネリック インターフェイスと、次のようなコピー コンストラクターがあるとします (ICloneable を置き換えます)。
// T: type of value to hold, TU: type of the class itself
interface ICopyable<T,TU> where TU: ICopyable<T,TU> {
T Value { get; set; }
TU Copy();
}
これは、次のようなブール値ホルダーによって実装できます。
class BooleanHolder : ICopyable<Boolean, BooleanHolder> {
public BooleanHolder Copy() {
return new BooleanHolder(){ Value = Value };
}
}
別の ICopyable を保持するデコレータ クラスをどのように定義しますか? 私のうまくいかないアイデアは次のとおりです。
class DecoratingHolder<T,TU> : ICopyable<ICopyable<T,TU>, DecoratingHolder<T,TU>> {
public DecoratingHolder<T,TU> Copy {
// won't compile as Value is of type T and not of type ICopyable<T,TU>
// as I expected - why is that?
return new DecoratingHolder<T,TU>(){ Value = Value.Copy };
}
}
Copy
type の値もコピーするように呼び出したことに注意してくださいICopyable<T,TU>
。これは、ディープ コピーを確実にするための意図的なものです。
では、この構造を機能させるには何を変更する必要がありますか?