gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:31:20 25 4
gpt4 key购买 nike

我没有用 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;
}

虽然我更喜欢创建一个不同的方法 Copy 而不是因为通常不清楚 Clone 的作用。甚至 Microsoft 也不建议实现 ICloneable

Why should I implement ICloneable in c#?

关于c# - 这个 IClonable 实现有什么问题吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22474366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com