ホームページ  >  記事  >  バックエンド開発  >  C# でコンストラクターをコピーする

C# でコンストラクターをコピーする

WBOY
WBOYオリジナル
2024-09-03 15:12:44668ブラウズ

他のオブジェクトの変数をコピーして新しいオブジェクトを作成するコンストラクターをコピーコンストラクターと呼びます。 C# では、コピー コンストラクターはパラメーター化されたコンストラクターでもあります。パラメーター化されたコンストラクターは、同じクラス型のパラメーターを含むコンストラクターです。コピー コンストラクターは、新しいインスタンスを既存のインスタンスの値に初期化する場合に便利です。したがって、Copy コンストラクターは、基本的に、既存のオブジェクトの値に影響を与えることなく、あるオブジェクトの値を別のオブジェクトに送信するコンストラクターです。

Copy Constructor は C# でどのように機能しますか?

C# では、クラスを監査したり、クラスの古い値を記憶したりする場合に、コピー コンストラクターを使用できます。 C# にはコピー コンストラクターがありません。ただし、コピー コンストラクターを別のコンストラクターと一緒に使用することはできます。

構文

class Name {
// Parameterized Constructor
public Name(parameters)
{
// code
}
public Name(Name instance of class)   //copyconstructor
{
//code
}
}

コンストラクターの名前はクラス名と同じです。コンストラクターのメソッド シグネチャは、メソッドの名前とそのパラメーター リストで構成されます。クラス内には任意の数のコンストラクターを含めることができます。コピー コンストラクターはクラス内の唯一のコンストラクターではありません。オブジェクトを作成するには、コピー コンストラクターとともに別のコンストラクターが必要です。以下は、クラスのコピー コンストラクターを使用する方法を示す例です。

例 1: コピー コンストラクターなし

コード

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() はオブジェクトの値を表示するために使用されます。

出力:

C# でコンストラクターをコピーする

コピーコンストラクターを使用する

コード

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 つのコンストラクターを含むクラスです。コピー コンストラクターは常に別のコンストラクターと一緒に使用されます。コピー コンストラクターは、あるオブジェクトの名前と年齢のプロパティを別のオブジェクトに送信します。以下は上記のプログラムの出力です。最初の値は既存のオブジェクトのものです。コンストラクターをコピーしてこれらの値をコピーし、既存のオブジェクトと同じ値を持つ新しいオブジェクトを作成します。

例 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() を使用して値が表示されます。新しいオブジェクトは既存のオブジェクトの値に影響を与えません。出力を以下に示します。

出力:

C# でコンストラクターをコピーする

例 3

コード

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();
}
}

出力:

C# でコンストラクターをコピーする

C# のコピー コンストラクターのルール

  • コピー コンストラクターの名前はクラス名と同じである必要があります。
  • オブジェクトをコピーするには、コピー コンストラクターとともに別のコンストラクターが必要です。
  • コピー コンストラクターの戻り値の型はありません。
  • コピー コンストラクターは、final、static、abstract にすることはできません。

結論

したがって、オブジェクトの値を他のオブジェクトにコピーしたいときはいつでも、コピー コンストラクターを使用できます。これは、あるオブジェクトの値を別のオブジェクトにコピーする方法をコンパイラに指示する方法です。これはオブジェクトにパラメータを渡すときに発生します。 ICloneable インターフェイスは、Clone メソッドをクラスに追加して、既存のオブジェクトのコピーを作成することによっても使用されます。コピー コンストラクターでは、一意の ID を指定するか、一部の必須フィールドをコピーして他のフィールドをコピーしないことによって、カスタム動作を指定できます。

以上がC# でコンストラクターをコピーするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。