为什么C#不支持Copy Constructor的概念?

时间:2010-04-20 15:24:07

标签: c# copy-constructor

在我的一次采访中,我被问到了这个问题,但我无法确切地知道为什么这个概念不存在。

请告诉我。

3 个答案:

答案 0 :(得分:28)

它没有内置于语言中,因为没有合理的默认实现

复制构造函数suffer from many of the same ambiguities as cloning。例如,您是要制作浅拷贝还是深拷贝取决于您的具体情况。

假设您有一个Order类,其Customer属性。它的复制构造函数应该创建一个 new 客户还是指向原始实例?可能是原始实例 - 但是Order.Payment呢?

更糟糕的是,即使你想要执行深层复制,你甚至可能无法创建所有的从属对象,因为它们的构造函数(或类似的工厂方法)可能无法访问

如果还不够,this article on Java Design Issues会突出显示其他一些问题(例如类型截断)。

答案 1 :(得分:6)

C#以什么方式不支持复制构造函数的想法?你可以自由地创建一个可以随心所欲地复制的版本。

答案 2 :(得分:2)

不是吗?

class Foo
{
   public Foo (Foo other)   // copy ctor
   { ... }
}

但也许我对其他规则适用于C ++(其中术语复制构造函数)的创造有点生疏。