【发布时间】:2015-06-17 22:30:37
【问题描述】:
情况如下:我正在尝试确定克隆对象的 where 部分以避免修改原始对象。
我有两个选择:
- 在调用者中克隆对象并将克隆的对象传递给方法(“被调用者”),从而防止被调用者进行潜在的修改。
- 在被调用者中克隆对象,因为被调用者修改了它传递的对象,这假设调用者从不希望修改参数对象。
我找到了这个 6 岁的答案,有各种各样的意见。不幸的是,似乎并没有达成真正的共识。
Passing copy of object to method -- who does the copying?
这是我的代码形式的问题:
- 我是否在调用者中克隆对象并将克隆的对象传递给方法?
public static void Main()
{
var foo = new Foo();
Bar.Baz(foo.DeepClone());
}
public static class Bar
{
public static void Baz(Foo foo)
{
/* ... modifies members in foo ... */
}
}
public class Foo { /* ... */ }
- 我是否在被调用者中克隆对象?
public static void Main()
{
var foo = new Foo();
Bar.Baz(foo);
}
public static class Bar
{
public static void Baz(Foo foo)
{
foo = foo.DeepClone();
/* ... modifies members in foo ... */
}
}
public class Foo { /* ... */ }
所以,我的问题是:
where 有哪些好的经验法则可以跨语言克隆对象,尤其是在 C# 和 .NET 领域?
无论答案如何,有哪些好的方法可以记录修改参数的方法或克隆对象的方法的行为?
【问题讨论】:
-
这个问题属于codereview.stackexchange.com。
-
代码审查声明“如果您的问题不是关于特定的代码段,而是关于……的普遍适用的问题”......“一般的最佳实践(也就是说,可以问”此代码是否遵循常见的最佳实践?”,而不是“关于 X 的最佳实践是什么?”)” ...“那么您的问题与本网站无关。”
-
这不适合当前形式的代码审查。代码是假设的;我们需要 CR 上的真实代码。如果您希望进行代码审查,请提供您希望审查的所有真实代码。
标签: c# clone single-responsibility-principle responsibility