[解決済み】C#でオブジェクトのコピーを作成する【重複あり
2022-04-11 03:04:54
質問
<余談
以下のコードをご覧ください(C#の本からの抜粋です)。
public class MyClass
{
public int val;
}
public struct myStruct
{
public int val;
}
public class Program
{
private static void Main(string[] args)
{
MyClass objectA = new MyClass();
MyClass objectB = objectA;
objectA.val = 10;
objectB.val = 20;
myStruct structA = new myStruct();
myStruct structB = structA;
structA.val = 30;
structB.val = 40;
Console.WriteLine("objectA.val = {0}", objectA.val);
Console.WriteLine("objectB.val = {0}", objectB.val);
Console.WriteLine("structA.val = {0}", structA.val);
Console.WriteLine("structB.val = {0}", structB.val);
Console.ReadKey();
}
}
以下のような出力が得られると理解しています。
objectA.val = 20
objectB.val = 20
structA.val = 30
structB.val = 40
最後の2行は問題ないのですが、最初の2行は、次のように出力されています。
objectA
と
objectB
は同じメモリブロックを指しています(C#では、オブジェクトは参照型なので)。
問題は、どのようにして
objectB
のコピーです。
objectA
で、メモリ上の別の領域を指すようにします。メンバが参照である可能性もあるので、メンバを割り当てようとするとうまくいかないかもしれないことは理解しています。では、どのようにすれば
objectB
とは全く別のエンティティである
objectA
?
解決方法は?
ビルトインの方法はありません。MyClassに実装させることができます。
IClonable
インターフェイスを使用するか (ただし、これは非推奨のようなものです)、独自のコピー/クローンメソッドを記述するだけです。どちらの場合でも、いくつかのコードを書かなければならない。
大きなオブジェクトの場合、既存のコードを再利用するために、シリアライズとデシリアライズ(MemoryStreamを使用)を検討することができます。
どのような方法であれ、quot;a copy"が正確に何を意味するかについて慎重に考えてください。どの程度の深さまでコピーする必要があるのか、例外となるIdフィールドはあるのか、など。
関連
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] JSオブジェクトをJSON文字列に変換する
-
[解決済み] Javaでオブジェクトをコピーするにはどうしたらいいですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] .NETでオブジェクトのディープコピーを行うにはどうすればよいですか?[重複しています]。