c# – 这个IClonable实现有什么问题吗?

c# – 这个IClonable实现有什么问题吗?,第1张

概述我没有用C#编程,但是我的儿子问我这个实现是否有什么问题 public class Person : A, IClonable {.... public object Clone() { return this; }} 我的直觉是它错了,因为这个Clone()方法实现不会返回任何新对象.我认为Clone()方法应该创建一个新对象或调用一个方法来创建一个新对象然后 我没有用C#编程,但是我的儿子问我这个实现是否有什么问题

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实现有什么问题吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存