【发布时间】:2012-11-12 13:41:30
【问题描述】:
假设您有一个通用接口,它定义了一个通用值和一个像这样的复制构造函数(替换 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 也是为了复制ICopyable<T,TU> 类型的值,这是为了确保深拷贝。
那么我必须改变什么才能使这个结构正常工作?
【问题讨论】:
标签: c# generics copy decorator