【发布时间】:2014-08-17 01:27:44
【问题描述】:
我了解对象的深克隆和浅克隆之间的区别,但根据 Simon 对this (copy-constructor-versus-clone) 问题的回答,应该提供通用和非通用版本。为什么?
您可以定义两个接口,一个带有泛型参数以支持强类型克隆,另一个则在处理不同类型可克隆对象的集合时保持弱类型克隆能力:
我的意思是制作不同的接口很简单,但是在现代 C# 的泛型繁重的范式中,我发现很难找到一个正当的理由来说明你曾经想要使用非泛型和弱类型版本。哎呀,你甚至可以拥有T:object 并做同样的事情!
我会这样写我的界面:
public interface IShallowCloneable
{
object Clone();
}
public interface IShallowCloneable<T> // Should this derive IShallowCloneable?
{
T Clone();
}
public interface IDeepCloneable
{
object Clone();
}
public interface IDeepCloneable<T> // Should this derive IDeepCloneable?
{
T Clone();
}
我的班级会这样实现它:
public class FooClass : IDeepCloneable<FooClass>
{
// Implementation
}
【问题讨论】:
-
您还可以考虑使模板接口在类型上协变:参见:msdn.microsoft.com/en-us/library/dd997386.aspx。因此,您需要将模板参数标记为
out T,例如IShallowCloneable<out T>
标签: c# generics interface clone