다른 객체의 변수를 복사하여 새로운 객체를 생성하는 생성자를 복사 생성자라고 합니다. 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(); } }
위의 예에는 두 개의 변수가 있는 매개변수화된 생성자가 하나만 있습니다. 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는 두 개의 생성자를 포함하는 클래스입니다. 복사 생성자는 항상 다른 생성자와 함께 사용됩니다. 복사 생성자는 한 개체의 이름 및 연령 속성을 다른 개체로 보냅니다. 아래는 위 프로그램의 출력입니다. 첫 번째 값은 기존 개체에 대한 것이며 생성자를 복사하여 이 값을 복사하고 기존 개체와 동일한 값으로 새 개체를 만듭니다.
코드
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(); }} }
위 프로그램에서는 클래스의 속성을 정의하는 클래스 펜에 대한 세 가지 변수를 초기화합니다. 복사 생성자는 한 개체에서 다른 개체로 펜의 속성을 복사합니다. 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와 두 개의 생성자, 즉 매개변수화된 생성자와 복사 생성자가 포함되어 있습니다.
코드
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()은 c1을 매개변수로 초기화한 다음 생성자를 복사하여 객체 c1의 값을 객체 c2로 보내는 Sum 클래스에 있습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!