C#のArrayクラスが実装するインターフェイスとは?ICloneableによるクローン作成を解説
System.Arrayが実装する主なインターフェイス
C#の System.Array クラスは、ICloneable、IList、ICollection、IEnumerable など、複数の標準インターフェイスを実装しています。これらのインターフェイスによって、配列はコピー・列挙・コレクション操作など、さまざまな場面で柔軟に扱えるようになっています。
本記事では、その中でも特に重要な ICloneable インターフェイスに焦点を当て、オブジェクトや配列の複製(クローン)方法をサンプルコードとともに解説します。
ICloneableインターフェイスとは
ICloneableインターフェイスには、Clone() メソッドが1つだけ定義されています。このメソッドは、現在のインスタンスのコピーである新しいオブジェクトを生成して返します。既存のオブジェクトを壊さずに、同じ内容を持つ別インスタンスが必要な場合に活用できます。
サンプル1:自作クラスでICloneableを実装する
以下は、独自のクラスにICloneableを実装し、Clone() メソッドでオブジェクトを複製する例です。
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);
}
}
この例では、Car クラスがICloneableを実装しており、Clone() 内で同じ幅(width)を持つ新しい Car インスタンスを返しています。元のオブジェクトとは独立したコピーが得られる点がポイントです。
サンプル2:Array.Clone()で配列を複製する
次に、C#の Array.Clone() メソッドを使って、文字列配列を丸ごと複製する方法を見てみましょう。
using System;
class Program {
static void Main() {
string[] arr = { "one", "two", "three", "four", "five" };
string[] arrCloned = arr.Clone() as string[];
Console.WriteLine(string.Join(",", arr));
// 複製された配列を出力
Console.WriteLine(string.Join(",", arrCloned));
Console.WriteLine();
}
}
Clone() の戻り値は object 型なので、as string[] のように適切な型へキャストして使用します。これにより、元の配列と同じ要素を持つ新しい配列が簡単に作成できます。
まとめ
System.ArrayクラスはICloneable、IList、ICollection、IEnumerableといったインターフェイスを実装しており、配列に対して多彩な操作を可能にしています。特にICloneableの Clone() メソッドを使えば、オブジェクトや配列の浅いコピーを手軽に作成できるため、データの複製が必要な場面でぜひ活用してください。
-
C#のクラスとは?定義方法と基本構造を初心者向けに解説
C#におけるクラスの基本的な考え方C#において、クラス(class)とは、あるデータ型の設計図(ブループリント)を定義するものです。クラスをもとにして実際に生成されたデータの実体をオブジェクト(object)と呼び、これをクラスの「インスタンス」といいます。また、クラスを構成するメソッドや変数は、まとめてクラスのメンバー(members)と呼ばれます。クラスを理解することは、オブジェクト指向プログラミングを学ぶ上で最も重要な第一歩となります。クラス定義の一般的な書式クラスの定義は、キーワード class から始まり、その後にクラス名を記述します。そして、波括弧 { } で囲まれた部分がクラスの
-
C#のクラスにおけるメンバー変数とは?意味と使い方を徹底解説
C#におけるクラスとメンバー変数の基本C#において、クラスはメンバー変数(フィールド)とメソッド(関数)を含む「設計図」であり、そこから生成されるオブジェクトの状態や振る舞いを定義するものです。まずはクラスの基本構文を確認し、メンバー変数がどのように宣言されるのかを見ていきましょう。クラスの基本構文<アクセス修飾子> class クラス名 { // メンバー変数 <アクセス修飾子> <データ型> 変数1; <アクセス