豚吐露@wiki

memcpyみたいにinstanceをcopyしたい

最終更新:

ohden

- view
管理者のみ編集可

複写したいクラスに『Serializable』属性を付与します。
e.g.) Class1に『Serializable』属性を付与したい場合
[Serializable]
class Class1

複写したいクラスに以下のようなメソッドを作成する。
e.g.) Class1の複写機能を作りたい場合
public Class1 DeepCopy()
{
  Class1 ret = null;

  BinaryFormatter bf = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));

  MemoryStream ms = new MemoryStream();
  bf.Serialize(ms, this);
  ms.Seek(0, SeekOrigin.Begin);
  ret = (Class1)bf.Deserialize(ms);

  return ret;
}

後は複写したいinstanceの当該メソッドをcallしてやるだけ。
e.g.) Class1の複写機能を使いたい場合
Class1 cs1 = new Class1();

~cs1に対する処理~

Class1 cs1cpy = cs1.DeepCopy();

※メンバにインスタンス突っ込むような事をしてるクラスをcopyしたい場合は、突っ込まれるクラスもserialize可能にしとかないとダメです。



更新日: 2014年10月14日 (火) 17時31分44秒

タグ:

C# CSharp .Net
記事メニュー
ウィキ募集バナー