public class Person : A,IClonable {.... public object Clone() { return this; }}
我的直觉是它错了,因为这个Clone()方法实现不会返回任何新对象.我认为Clone()方法应该创建一个新对象或调用一个方法来创建一个新对象然后返回它.这就是我对我儿子所说的,但没有做过任何C#编程,我变得不确定了.有人会对此有所了解吗?
解决方法My gut feeling is that it is wrong because this Clone() method
implementation does not return any new object
那种感觉不会欺骗你.如果要创建新对象,则需要创建新对象.否则它只是相同的参考,这种实现是毫无意义和误导.
考虑一下你的类有一个StringProperty:
Person p1 = new Person{ StringProperty = "Foo" };Person p2 = (Person)p1.Clone();p2.StringProperty = "Bah";Console.Write(p1.StringProperty); // "Bah"
你看,即使我改变了p2上的属性,我也修改了另一个实例的StringProperty,因为它实际上是相同的.
所以你需要这样的东西:
public object Clone() { Person p2 = new Person(); p2.StringProperty = this.StringProperty; // ... return p2;}
虽然我更喜欢创建一个不同的方法复制,因为它通常不清楚克隆的作用.甚至微软也建议不要实施ICloneable.
Why should I implement ICloneable in c#?
总结以上是内存溢出为你收集整理的c# – 这个IClonable实现有什么问题吗?全部内容,希望文章能够帮你解决c# – 这个IClonable实现有什么问题吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)