windows C#-编写复制构造函数

打印 上一主题 下一主题

主题 769|帖子 769|积分 2307

C # 记录为对象提供复制构造函数,但对于类,你必须自行编写。
编写实用于类层次结构中所有派生范例的复制构造函数可能很困难。 如果类不是 sealed,则强烈发起思量创建 record class 范例的层次结构,以使用编译器合成的复制构造函数。
示例

在下面的示例中,Person类界说一个复制构造函数,该函数使用 Person 的实例作为其参数。 该参数的属性值分配给 Person 的新实例的属性。 该代码包罗一个备用复制构造函数,该函数发送要复制到该类的实例构造函数的实例的 Name 和 Age 属性。 Person 类为 sealed,因此无法通过仅复制基类来声明可能会引发错误的派生范例。
  1. public sealed class Person
  2. {
  3.     // Copy constructor.
  4.     public Person(Person previousPerson)
  5.     {
  6.         Name = previousPerson.Name;
  7.         Age = previousPerson.Age;
  8.     }
  9.      Alternate copy constructor calls the instance constructor.
  10.     //public Person(Person previousPerson)
  11.     //    : this(previousPerson.Name, previousPerson.Age)
  12.     //{
  13.     //}
  14.     // Instance constructor.
  15.     public Person(string name, int age)
  16.     {
  17.         Name = name;
  18.         Age = age;
  19.     }
  20.     public int Age { get; set; }
  21.     public string Name { get; set; }
  22.     public string Details()
  23.     {
  24.         return Name + " is " + Age.ToString();
  25.     }
  26. }
  27. class TestPerson
  28. {
  29.     static void Main()
  30.     {
  31.         // Create a Person object by using the instance constructor.
  32.         Person person1 = new Person("George", 40);
  33.         // Create another Person object, copying person1.
  34.         Person person2 = new Person(person1);
  35.         // Change each person's age.
  36.         person1.Age = 39;
  37.         person2.Age = 41;
  38.         // Change person2's name.
  39.         person2.Name = "Charles";
  40.         // Show details to verify that the name and age fields are distinct.
  41.         Console.WriteLine(person1.Details());
  42.         Console.WriteLine(person2.Details());
  43.         // Keep the console window open in debug mode.
  44.         Console.WriteLine("Press any key to exit.");
  45.         Console.ReadKey();
  46.     }
  47. }
  48. // Output:
  49. // George is 39
  50. // Charles is 41
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表