C # 记录为对象提供复制构造函数,但对于类,你必须自行编写。
重要
编写适用于类层次结构中所有派生类型的复制构造函数可能很困难。 如果类不是 sealed
,则强烈建议考虑创建 record class
类型的层次结构,以使用编译器合成的复制构造函数。
在下面的示例中,Person
类定义一个复制构造函数,该函数使用 Person
的实例作为其参数。 该参数的属性值分配给 Person
的新实例的属性。 该代码包含一个备用复制构造函数,该函数发送要复制到该类的实例构造函数的实例的 Name
和 Age
属性。 Person
类为 sealed
,因此无法通过仅复制基类来声明可能会引发错误的派生类型。
public sealed class Person
{
public Person(Person previousPerson)
{
Name = previousPerson.Name;
Age = previousPerson.Age;
}
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()
{
Person person1 = new Person("George", 40);
Person person2 = new Person(person1);
person1.Age = 39;
person2.Age = 41;
person2.Name = "Charles";
Console.WriteLine(person1.Details());
Console.WriteLine(person2.Details());
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}