假設你有一個通用的接口,它定義了一個通用值和拷貝構造函數這樣的(更換ICloneable):如何實現泛型類的裝飾器的複製方法?
class BooleanHolder : ICopyable<Boolean, BooleanHolder> {
public BooleanHolder Copy() {
return new BooleanHolder(){ Value = Value };
}
}
:
// 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();
}
這可能是一個布爾值保持這樣可以實現
現在出現了這樣的問題:你將如何定義一個容納另一個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
也有複製ICopyable<T,TU>
類型的值,這是故意的,以確保深層副本。
那麼,爲了使這個結構起作用,我需要改變什麼?
這實際上比我的方法更好,謝謝。 –
@ChrisSinclair啊,對不起,我只是注意到我忘了提到實現深層副本的必要性。你會不會適應你的回答 – Bastian
@Bastian對不起,我瞥見了那個細節。我添加了另一個編輯。 –