C# 레코드는 개체의 복사 생성자를 제공하지만 클래스의 경우 직접 작성해야 합니다.
Important
클래스 계층 구문의 모든 파생 형식에 대해 작동하는 복사 생성자를 작성하는 것은 어려울 수 있습니다. 클래스가 sealed
가 아닌 경우 컴파일러 합성 복사 생성자를 사용하려면 record class
형식의 계층 구문을 만드는 것을 적극 고려해야 합니다.
예시
다음 예제에서 Person
클래스는 인수로 Person
의 인스턴스를 사용하는 복사 생성자를 정의합니다. 인수의 속성 값이 Person
의 새 인스턴스 속성에 할당됩니다. 코드에는 복사하려는 인스턴스의 Name
및 Age
속성을 클래스의 인스턴스 생성자에 보내는 대체 복사 생성자가 포함되어 있습니다. Person
클래스는 sealed
이므로 기본 클래스만 복사하여 오류를 일으킬 수 있는 파생 형식을 선언할 수 없습니다.
public sealed class Person
{
// Copy constructor.
public Person(Person previousPerson)
{
Name = previousPerson.Name;
Age = previousPerson.Age;
}
//// Alternate copy constructor calls the instance constructor.
//public Person(Person previousPerson)
// : this(previousPerson.Name, previousPerson.Age)
//{
//}
// Instance constructor.
public Person(string name, int age)
{
Name = name;
Age = age;
}
public int Age { get; set; }
public string Name { get; set; }
public string Details()
{
return Name + " is " + Age.ToString();
}
}
class TestPerson
{
static void Main()
{
// Create a Person object by using the instance constructor.
Person person1 = new Person("George", 40);
// Create another Person object, copying person1.
Person person2 = new Person(person1);
// Change each person's age.
person1.Age = 39;
person2.Age = 41;
// Change person2's name.
person2.Name = "Charles";
// Show details to verify that the name and age fields are distinct.
Console.WriteLine(person1.Details());
Console.WriteLine(person2.Details());
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output:
// George is 39
// Charles is 41
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET