今日、後輩のコードレビューをしていると、MemberwiseCloneを使用して、コピーをしている部分がありました。
return this.MemberwiseClone()と書いてあるので、参照型の場合に正しい結果が得られないといいました。
しかし、テストコード上では正しく動作しています。
ヘルプを調べるとわかりますが、以下MSDNの抜粋。
MemberwiseClone メソッドは、新しいオブジェクトを作成し、現在のオブジェクトの非静的フィールドをその新しいオブジェクトにコピーすることによって、簡易コピーを作成します。フィールドが値型の場合、そのフィールドはビット単位でコピーされます。フィールドが参照型の場合、参照はコピーされますが、参照先オブジェクトはコピーされないため、元のオブジェクトとその複製は同じオブジェクトを参照します。
テストコードを書いても、オブジェクトを参照するので、テストコード上では正しく動作します。
こういったものはコードレビューをしないと見つからないと思いました。
MemberwiseCloneを使用するときには注意をしなくてはならないと思いました。
return this.MemberwiseClone()と書いてあるので、参照型の場合に正しい結果が得られないといいました。
しかし、テストコード上では正しく動作しています。
ヘルプを調べるとわかりますが、以下MSDNの抜粋。
MemberwiseClone メソッドは、新しいオブジェクトを作成し、現在のオブジェクトの非静的フィールドをその新しいオブジェクトにコピーすることによって、簡易コピーを作成します。フィールドが値型の場合、そのフィールドはビット単位でコピーされます。フィールドが参照型の場合、参照はコピーされますが、参照先オブジェクトはコピーされないため、元のオブジェクトとその複製は同じオブジェクトを参照します。
テストコードを書いても、オブジェクトを参照するので、テストコード上では正しく動作します。
こういったものはコードレビューをしないと見つからないと思いました。
MemberwiseCloneを使用するときには注意をしなくてはならないと思いました。
※コメント投稿者のブログIDはブログ作成者のみに通知されます