C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のICloneableインターフェイスとは?オブジェクトの複製(クローン)方法を解説

C#のICloneableインターフェイスは、既存のオブジェクトのコピー、つまり「クローン」を作成するための仕組みを提供します。このインターフェイスを実装したクラスは、自身の複製を簡単に生成できるようになります。

ICloneableインターフェイスの構成

ICloneableインターフェイスには、メソッドが1つだけ定義されています。

  • Clone()メソッド: 現在のインスタンスのコピーである新しいオブジェクトを作成して返します。

実装例

以下は、ICloneableインターフェイスを使ってオブジェクトのクローンを作成するサンプルコードです。

using System;

class Car : ICloneable {
    int width;

    public Car(int width) {
        this.width = width;
    }

    public object Clone() {
        return new Car(this.width);
    }

    public override string ToString() {
        return string.Format("Width of car = {0}", this.width);
    }
}

class Program {
    static void Main() {
        Car carOne = new Car(1695);
        Car carTwo = carOne.Clone() as Car;

        Console.WriteLine("{0}mm", carOne);
        Console.WriteLine("{0}mm", carTwo);
    }
}

実行結果

Width of car = 1695mm
Width of car = 1695mm

コードのポイント

  • CarクラスはICloneableインターフェイスを実装し、Clone()メソッド内で同じ幅(width)を持つ新しいCarインスタンスを返しています。
  • Mainメソッドでは、Clone()メソッドの戻り値をas演算子でCar型にキャストしています。
  • 元のオブジェクトとクローンされたオブジェクトの両方が、同じ値を出力していることが確認できます。

注意点:浅いコピーと深いコピー

Clone()メソッドで返すコピーには「浅いコピー(Shallow Copy)」と「深いコピー(Deep Copy)」の2種類があります。上記の例のように単純な値型フィールドのみを持つ場合は問題ありませんが、参照型のフィールドを含むクラスの場合、浅いコピーでは内部オブジェクトが共有されてしまうため、必要に応じて深いコピーを実装することが重要です。

  1. Twitterのバイオとは?意味・変更方法と魅力的な例文を徹底解説

    Twitterのバイオとは?その意味と役割Twitterのバイオ(自己紹介文)は、プロフィール設定を構成する重要な要素のひとつです。プロフィール画面では、名前とハンドルネーム(@ユーザー名)の下に表示されます。自分がどのような人物なのかを短く紹介したり、興味や関心を伝えたり、自分のビジネスをアピールしたりするために活用しましょう。バイオの変更方法バイオはプロフィールの編集からいつでも変更できます。ハッシュタグ(#)や@ユーザー名を組み合わせれば、より多くの人に自分のアカウントを見つけてもらいやすくなります。なお、バイオにはスペースを含めて160文字までという文字数制限がある点に注意してください

  2. Pythonの&=演算子とは?ビット演算とインプレース代入の仕組みを解説

    &=演算子の正体:object.__iand__()メソッドPythonにおける &= 演算子は、object.__iand__() メソッドに対するシンタックスシュガー(糖衣構文)です。公式ドキュメントには以下のように記載されています。「これらのメソッドは、拡張代入演算子(+=、-=、*=、@=、/=、//=、%=、**=、<<=、>>=、&=、^=、|=)を実装するために呼び出されます。これらのメソッドは、可能な限りインプレース(self自身を直接変更する形)で操作を行い、その結果を返すことが求められます(返り値はselfである必要はありませ