状況は次のとおりです。元のオブジェクトの変更を避けるために、オブジェクトの複製のどこの部分を決定しようとしています。
2 つのオプションがあります。
- 呼び出し元でオブジェクトを複製し、複製されたオブジェクトをメソッド (「呼び出し先」) に渡すことで、呼び出し先による潜在的な変更を防ぎます。
- 呼び出し先は渡されたオブジェクトを変更するため、呼び出し先でオブジェクトを複製します。これにより、呼び出し元が引数オブジェクトの変更を望んでいないことが前提になります。
この6歳の答えをさまざまな意見で見つけました。残念ながら、本当のコンセンサスがあったようには見えません。
オブジェクトのコピーをメソッドに渡す -- 誰がコピーを行うのか?
コード形式での私の質問は次のとおりです。
- 呼び出し元でオブジェクトを複製し、複製したオブジェクトをメソッドに渡しますか?
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 { /* ... */ }
だから、私の質問は次のとおりです。
特に C# と .NET ランドで、複数の言語間でオブジェクトを複製する場所に関する経験則は何ですか?
答えに関係なく、引数を変更するメソッドまたはオブジェクトを複製するメソッドの動作を文書化する良い方法は何ですか?