他のオブジェクトの変数をコピーして新しいオブジェクトを作成するコンストラクターをコピーコンストラクターと呼びます。 C# では、コピー コンストラクターはパラメーター化されたコンストラクターでもあります。パラメーター化されたコンストラクターは、同じクラス型のパラメーターを含むコンストラクターです。コピー コンストラクターは、新しいインスタンスを既存のインスタンスの値に初期化する場合に便利です。したがって、Copy コンストラクターは、基本的に、既存のオブジェクトの値に影響を与えることなく、あるオブジェクトの値を別のオブジェクトに送信するコンストラクターです。
C# では、クラスを監査したり、クラスの古い値を記憶したりする場合に、コピー コンストラクターを使用できます。 C# にはコピー コンストラクターがありません。ただし、コピー コンストラクターを別のコンストラクターと一緒に使用することはできます。
構文
class Name { // Parameterized Constructor public Name(parameters) { // code } public Name(Name instance of class) //copyconstructor { //code } }
コンストラクターの名前はクラス名と同じです。コンストラクターのメソッド シグネチャは、メソッドの名前とそのパラメーター リストで構成されます。クラス内には任意の数のコンストラクターを含めることができます。コピー コンストラクターはクラス内の唯一のコンストラクターではありません。オブジェクトを作成するには、コピー コンストラクターとともに別のコンストラクターが必要です。以下は、クラスのコピー コンストラクターを使用する方法を示す例です。
コード
class Demo { //variables string name; int age; public Demo(string name, int age) //parameterized constructor { this.name = name; this.age = age; } public void getData() { Console.WriteLine("Name is:{0}", name); Console.WriteLine("Age is:{0}", age); } } class Program { // Main method static void Main(string[] args) { Demo obj = new Demo("John",20); obj.getData(); Console.ReadLine(); } }
上記の例では、2 つの変数を持つパラメーター化されたコンストラクターが 1 つだけあります。 getData() はオブジェクトの値を表示するために使用されます。
出力:
コード
class Demo { string name; int age; public Demo(string name, int age) //paramertrized constructor { this.name = name; this.age = age; } public Demo(Demo d) //copy constructor { this.name = d.name; this.age = d.age; } public void getData() { Console.WriteLine("Name is:{0}", name); Console.WriteLine("Age is:{0}", age); } } class Program { //main method static void Main(string[] args){ Demo obj = new Demo("John",20); obj.getData(); Demo obj1 = new Demo(obj); //new object obj1.getData(); Console.ReadLine(); } }
上記の例では、Demo は 2 つのコンストラクターを含むクラスです。コピー コンストラクターは常に別のコンストラクターと一緒に使用されます。コピー コンストラクターは、あるオブジェクトの名前と年齢のプロパティを別のオブジェクトに送信します。以下は上記のプログラムの出力です。最初の値は既存のオブジェクトのものです。コンストラクターをコピーしてこれらの値をコピーし、既存のオブジェクトと同じ値を持つ新しいオブジェクトを作成します。
コード
class pen { // variables private string name; private string color; private int price; // Copy constructor public pen(pen a) { name = a.name; color = a.color;quantity = a.price; } // Parameterized constructor public pen(string name, string color, int price){ this.name = name; this.color = color; this.quantity =price; } public void getPendetails() {Console.WriteLine("Name is:{0}", name); Console.WriteLine("color is:{0}", color); Console.WriteLine("price is:{0}", price); } // Main Method public static void Main() { // Create a new object. pen p1 = new pen("Parker", "Blue", 30); pen p2 = new pen(p1); p2.getPendetails(); Console.ReadLine(); }} }
上記のプログラムでは、クラスのプロパティを定義するクラス ペンの 3 つの変数を初期化します。コピー コンストラクターは、ペンのプロパティをあるオブジェクトから別のオブジェクトにコピーします。 main() 関数は、パラメータ化されたコンストラクターのパラメータとして値を使用してオブジェクトを初期化します。次に、getPendetails() を使用して値が表示されます。新しいオブジェクトは既存のオブジェクトの値に影響を与えません。出力を以下に示します。
出力:
コード
class Calculate { //variables private int a; private int b; public Calculate(int x, int y) // parameterized constructor { a = x; b = y; } public Calculate(Calculate cal) //copy constructor { a = cal.a; b = cal.b; } public int getSum() { return a + b; } } class Sum { // main method static void Main(string[] args) { // create a new object Calculate c1 = new Calculate(34, 4); Calculate c2 = new Calculate(c1); c2.getSum(); Console.ReadLine(); } }
ここで、上記のプログラムを理解しましょう。
このクラスには、変数 a と b および 2 つのコンストラクター (パラメーター化されたコンストラクターとコピー コンストラクター) が含まれています。
コード
class Calculate { //variables private int a; private int b; public Calculate(int x, int y) //parameterized constructor { a = x; b = y; } public Calculate(Calculate cal) //copy constructor { a = cal.a; b = cal.b; } public int getSum() { return a + b; } }
コピー コンストラクターは、cal オブジェクトの値を a と b に送信します。 関数 gets() は a と b の合計を返します。 main() はクラス Sum 内にあり、c1 をパラメータとして初期化し、コンストラクタをコピーしてオブジェクト c1 の値をオブジェクト c2 に送信します。 a と b の合計は getSum() を使用して表示されます。
コード
class Sum { // main method static void Main(string[] args) { Calculate c1 = new Calculate(34, 4); Calculate c2 = new Calculate(c1); c2.getSum(); Console.ReadLine(); } }
出力:
したがって、オブジェクトの値を他のオブジェクトにコピーしたいときはいつでも、コピー コンストラクターを使用できます。これは、あるオブジェクトの値を別のオブジェクトにコピーする方法をコンパイラに指示する方法です。これはオブジェクトにパラメータを渡すときに発生します。 ICloneable インターフェイスは、Clone メソッドをクラスに追加して、既存のオブジェクトのコピーを作成することによっても使用されます。コピー コンストラクターでは、一意の ID を指定するか、一部の必須フィールドをコピーして他のフィールドをコピーしないことによって、カスタム動作を指定できます。
以上がC# でコンストラクターをコピーするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。