c# – 如何克隆对象

当我做以下..任何做的人b修改人a(我认为这样做会克隆人b从人a)。我也不知道如果更改Person a将更改Person b链接后。由于我的代码,现在,我只能看到在1方向。

Person a = new Person() { head = "big", feet = "small" };
Person b = a; 

b.head = "small"; //now a.head = "small" too   

现在,如果我这样做。代理人变得完全独立。

Person b = new Person() { head = a.head, feet = a.feet };

现在这个罚款和kinda有意义的比较这种行为与其他事情在C#。但是,这可能会对大型对象非常恼火。

有没有办法快捷这个?

如:

人b = a.Values;

Is there a way to shortcut this at all?

不,不是真的。您需要创建一个新实例,以避免原始影响“副本”。有几个选项:

>如果你的类型是一个结构,而不是一个类,它将被复制的值(而不是只复制对实例的引用)。这将给它你所描述的语义,但有许多其他的副作用,往往是不理想的,不推荐任何可变类型(这显然是,或者这不会是一个问题!)
>对你的类型实现一个“克隆”机制。这可以是ICloneable或甚至只是一个构造函数,它接受一个实例并从中复制值。
>使用反射,MemberwiseClone或类似方法复制所有值,因此您不必编写代码来执行此操作。这有潜在的问题,特别是如果你有字段包含非简单类型。

http://stackoverflow.com/questions/5359318/how-to-clone-objects

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 如何克隆对象