hayateasdf's blog

Unity,C#, javascript,C++,python,batなど

インターフェイス クローン実装

 

//クローンはSystem.Clonable?を使っています。

  public class test : ICloneable

    {

        public int value;

        public test() {}

        public test(test ts)

        {

            value = ts.value;

        }

        public object Clone()

        {

            Console.WriteLine(value);

            return new test(this);

        }

    }

 

static void Main(string args[])

{

           test ts = new test();

 

            ts.value = 100;

            test t2 = (test)ts.Clone();      // v.Clone() as testでも可。

 

            //コピーされているか確認

            Console.WriteLine(t2.value);   

 

            //参照になっていないか確認  (値を変えて元のts.Valueも変わっていたら参照になっているので失敗)

            t2.value = 200;

            Console.WriteLine(t2.value);

            Console.WriteLine(ts.value);

}

 

 

インターフェイスの実験というよりクラスによる参照渡しでのコピーをやりたくないときがあったのでクローンを使って値渡しに変えてみるときに使うと思います。

参考URL

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1456874764

 

※注意点

    public test(test ts)

        {

            value = ts.value;

        }

受け取ったts.valueを(this.)valueにコピーするのであって逆にしたら正しくコピーされませんので注意してください。