C# でコンストラクターをコピーする
他のオブジェクトの変数をコピーして新しいオブジェクトを作成するコンストラクターをコピーコンストラクターと呼びます。 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() はオブジェクトの値を表示するために使用されます。
出力:
コピーコンストラクターを使用する
コード
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() を使用して値が表示されます。新しいオブジェクトは既存のオブジェクトの値に影響を与えません。出力を以下に示します。
出力:
例 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# のコピー コンストラクターのルール
- コピー コンストラクターの名前はクラス名と同じである必要があります。
- オブジェクトをコピーするには、コピー コンストラクターとともに別のコンストラクターが必要です。
- コピー コンストラクターの戻り値の型はありません。
- コピー コンストラクターは、final、static、abstract にすることはできません。
結論
したがって、オブジェクトの値を他のオブジェクトにコピーしたいときはいつでも、コピー コンストラクターを使用できます。これは、あるオブジェクトの値を別のオブジェクトにコピーする方法をコンパイラに指示する方法です。これはオブジェクトにパラメータを渡すときに発生します。 ICloneable インターフェイスは、Clone メソッドをクラスに追加して、既存のオブジェクトのコピーを作成することによっても使用されます。コピー コンストラクターでは、一意の ID を指定するか、一部の必須フィールドをコピーして他のフィールドをコピーしないことによって、カスタム動作を指定できます。
以上がC# でコンストラクターをコピーするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

XML形式を変更する方法はいくつかあります。Atepadなどのテキストエディターを使用して手動で編集する。 XmlBeautifierなどのオンラインまたはデスクトップXMLフォーマットツールを使用して自動的にフォーマットします。 XSLTなどのXML変換ツールを使用して変換ルールを定義します。または、Pythonなどのプログラミング言語を使用して解析および操作します。元のファイルを変更してバックアップするときは注意してください。
