加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 23:43:00 所属栏目:百科 来源:网络整理
导读:我没有用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#?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读