※ ChatGPTを利用し、要約された質問です(原文:C# クラスのコピー)
C#クラスのコピー方法について
このQ&Aのポイント
C#の開発において、クラスのコピー方法について質問です。具体的には、Copyメソッドを使って値だけを別のインスタンスに渡す方法について知りたいです。
C#の開発で、クラスのコピーにはCloneメソッドを使うことが一般的です。しかし、Cloneメソッドでは新しいインスタンスを作成するため、値だけを別のインスタンスに渡すことが難しいです。
そこで、Copyメソッドを新たに定義する方法があります。Copyメソッドでは、引数として渡されたインスタンスに値をコピーする処理を行います。この方法を使うことで、値だけを別のインスタンスに渡すことが可能になります。
VisualStudio2013 でC#を使って開発を行っています。
クラスのコピーについて質問させてください。
public class Config
{
public int H;
public int V;
public object Clone()
{
return MemberwiseClone();
}
}
public class Test
{
void Hoge()
{
Config org = new Config();
org.H = 10;
org.V = 20;
Config copy;
copy = (Config)org.Clone();
}
}
このように記述した際にcopy とorgが別インスタンス?(アドレス?)を指していることは理解できています。
この場合、Clone()を読んだ際にnewされるイメージですが、
先にnewしたインスタンスに値だけを渡す方法はありますでしょうか?
Config copy = new Config();
// copy = org; // orgの中の値だけをcopyへ渡したい
class Config に
public void Copy(Config cfg)
{
cfg.H = this.H;
cfg.V = this.V;
}
と記述して、Clone()の代わりにすれば実現できるかなと思うのですが、実際は複雑なクラスの為うまいやり方がないかと思いました。
間違いやアドバイス等ありましたらなんでも良いのでお願いします。
よろしくお願いします。
補足
ありがとうございます。 それも考えたのですが、今あるクラスが複雑で src.H = this.H; src.V = this.V; といった具合に一つずつ書いていくには量が多い為、値だけ渡せないかと思ったんです。 地道に一つずつ書いていくしかないですかね。