プロが教えるわが家の防犯対策術!

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()の代わりにすれば実現できるかなと思うのですが、実際は複雑なクラスの為うまいやり方がないかと思いました。

間違いやアドバイス等ありましたらなんでも良いのでお願いします。
よろしくお願いします。

A 回答 (1件)

コピーコンストラクタをConfigに作ればいいかと


Copyメソッドを作るのであれば 引数を ref引数にするとか …

// コピーコンストラクタ
public Config(ref Config src)
{
  this.H = src.H;
  this.V = src.V;
}

// ref引数の Copyメソッド …
public void Copy(ref src)
{
  src.H = this.H;
  src.V = this.V;
}

といった具合で …

この回答への補足

ありがとうございます。
それも考えたのですが、今あるクラスが複雑で
  src.H = this.H;
  src.V = this.V;
といった具合に一つずつ書いていくには量が多い為、値だけ渡せないかと思ったんです。
地道に一つずつ書いていくしかないですかね。

補足日時:2014/10/02 13:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!