だから私は私のC#の本を読んでいると、それはオブジェクトのディープコピーを作成するためのメソッドを作成する方法の例があります。System.ObjectにCloneメソッドを入れなかったのはなぜですか?
[Serializable]
public class DeepClone : IDeepCopy<DeepClone>
{
public int data = 1;
public List<string> ListData = new List<string>();
public object objData = new Object();
public DeepClone DeepCopy()
{
BinaryFormatter BF = new BinaryFormatter();
MemoryStream memSfream = new MemoryStream();
BF.Serialize(memStream,this);
memStream.Flush();
memStream.Position = 0;
return (DeepClone)BF.Deserialize(memStream);
}
}
をしかし、この方法DeepCopy
は、それが依存していないことを十分に一般的ですオブジェクトの他のメンバ上にある。
public int data = 1;
public List<string> ListData = new List<string>();
public object objData = new Object();
オブジェクト。私が知る限り、この方法はいずれもclass
に入れることができ、まったく同じように動作します。さらに、オブジェクトをコピーする方法は、多くのC#プログラマーが、初めて言語を使用するときに、this threadの人気が証明するような質問です。
これはなぜSystem.Object
にクローン機能が指定されていないのかという質問が表示されます。結局のところ、プログラマはGetHashcode
メソッドよりも多くの場合、Clone
メソッドが必要になると思います。
"プログラマーは、GetHashcodeメソッドよりもCloneメソッドが必要になることが多いと思います。"私は 'GetHashCode'を使ったよりも' Clone'を使ったことはないと思うし、 'GetHashCode'に'Object'に入っています。すべてがクローン化に適しているわけではなく、すべてがハッシュテーブルのキーとして使用するのに適しているわけではありません。 –
.NETのデザイナーは、C++からそのレッスンをうまく学びました。プログラマーが正しくクローンを実装していないため、誤った動作をするプログラムを頻繁に作成する言語。それについてはなんのこともありません。ICloneableは、間抜けになるにつれて狭くエスケープされました。ガベージコレクションのおかげで、.NETでは必要性はあまりありません。 –