像任何其他 C# 程序员一样,我面临如何最好地表达对象复制的问题。具体来说,我有一个类层次结构,其中所有对象都必须是可复制的。
已经讨论过是使用复制构造函数(C# 不提供)还是Clone()
方法;另一种选择是使用获取对象并生成副本的方法。所有选项都有优点和缺点,但所有选项的一个共同问题是打字问题。
我想以任何可能的方式声明,在我的类层次结构中的所有对象上都存在一个复制操作,该操作总是产生与原始对象相同类型的对象- 这样任何违反此行为的行为都会在编译时报告时间。
这三个选项都不允许我这样做,即使使用泛型也是如此。显然,C#根本不允许我这样做;Java 和我知道的其他一些语言也没有。
为什么不?类型系统中的这样一个特性是否太难实现?它会导致不一致吗?我希望准确键入的复制操作是否被视为极端情况?有没有其他方法可以实现我错过的?
PS:请注意,这个问题不是关于浅拷贝和深拷贝的区别,如何拷贝,或者根本不做。