C # 记录为对象提供复制构造函数,但对于类,你必须自行编写。
编写实用于类层次结构中所有派生范例的复制构造函数可能很困难。 如果类不是 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
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |