creation漢字をローマ字・英語に変換します。変数名を作成するためのツールです。深いコピーコメントを書くオブジェクトをコピーしてデータを編集する。「保存」ボタンをクリックしたときに、編集データの保存かキャンセルを選べるような場合に有効ですが、使い方を誤ると思わぬ事故を誘発します。Copy)を間違えて「本来変わってはいけない値が変わってしまう」というものです。そこで本稿ではオブジェクトの複製についてまとめていきたいと思います。はじめに「会員」の情報が以下のように定義されていたとします。(Membership)MemberwiseClone();}}}オブジェクトのコピーで一番簡単な方法は「代入」です。ためしに以下のコードを実行してみましょう。[999][ABCDEFGHIJ][リファクタ]会員1の情報だけを変えたつもりが、会員2の情報まで変わってしまいました。これは「membership1」と「membership2」の参照先が同じなので、会員1への変更が会員2にも反映されてしまったことが原因です。会員1への変更が会員2にも反映されてしまった。それでは会員クラス(Membership)に実装した「Clone」メソッドでコピーしてみましょう。[999][ABCDEFGHIJ][変数名.com]ニックネームは会員1だけ変わりましたが、アカウントの情報は会員2も変わってしまいました。これは会員クラス(Membership)に実装した「Clone」メソッドで使用している「MemberwiseClone」メソッドが、浅いコピーを作成することが原因です。浅いコピーは値型のフィールドをビット単位でコピーしますが、参照型のフィールドは参照のみをコピーします。会員1のアカウント情報の変更が会員2にも反映されてしまった。参照型のフィールドもビット単位でコピーするためには、深いコピーを作成する必要があります。深いコピーを作成する方法の一つにシリアライズを利用する方法があり、私はこの方法が一番わかりやすくて気に入っています。シリアライズを利用するためには、クラスに[Serializable]属性を付与する必要があります。アカウントクラス(Account)と会員クラス(Membership)に付与し、続いて「Clone」メソッドをシリアライズを利用して書き換えてみましょう。(Membership)formatter.Deserialize(stream);}finally{stream.Close();}}}}それでは会員クラス(Membership)に実装した「Clone」メソッドでもう一度コピーしてみましょう。[1][1234567890][変数名.com]今度は無事に会員1の情報だけが変更されました。会員1の情報だけが変更された!このように深いコピーはいいことずくめのように見えますが、クラスの内容を一旦ストリームに吐き出し、そのストリームから再度クラスを生成しているので、処理は当然遅くなります。何でもかんでも深いコピーを利用するのではなく、参照系は浅いコピー、更新系は深いコピーを利用するなど、ケースバイケースで使い分けることをおススメします。全国の駅や目的地近くの宿泊施設を検索し予約することができます。最寄駅沿線からもホテルを検索できるので、アクセスのよいホテルを予約することが可能です。)コメントはまだありません。URLトラックバックはまだありません。返信をキャンセルする。JAPANマイナンバーマイナンバー導入診断マイナンバー導入診断とは、中小企業のマイナンバー導入を支援するためのツールです。マイナンバー導入診断の使い方マイナンバー導入診断のマニュアルを作成しました。3.4.5MessizClipArabikiTOP。