找回密码
 立即注册
查看: 28|回复: 0

构造函数重载 调用:this 这样省略每次都写赋值操作,造成代码冗余

[复制链接]

13

主题

0

回帖

55

积分

管理员

积分
55
发表于 2025-8-8 16:58:32 | 显示全部楼层 |阅读模式

在 C#中,this() 是构造函数之间的调用语法,用于在一个构造函数中调用同一个类中的另一个构造函数,这种机制称为构造函数链(ConstructorChaining)。
构造函数重载 调用:this 这样省略每次都写赋值操作,造成代码冗余
作用

  • 减少代码重复:将多个构造函数的共同初始化逻辑集中到一个构造函数中,其他构造函数通过 this() 调用它
  • 保证初始化一致性:确保对象在任何构造路径下都能得到正确初始化
语法规则

  • this() 必须是构造函数体内的第一条语句
  • 可以带参数(如 this("默认值")),用于匹配对应参数的构造函数
  • 不能形成递归调用(如     A 调用 B,B 又调用 A)
示列代码:
  1. public class Person
  2. {
  3.     public string Name { get; set; }
  4.     public int Age { get; set; }

  5.     // 无参构造函数
  6.     public Person() : this("未知", 0)  // 调用带两个参数的构造函数
  7.     {
  8.         // 这里可以添加额外逻辑(可选)
  9.         Console.WriteLine("无参构造函数被调用");
  10.     }

  11.     // 带一个参数的构造函数
  12.     public Person(string name) : this(name, 0)  // 调用带两个参数的构造函数
  13.     {
  14.         // 额外逻辑(可选)
  15.     }

  16.     // 带两个参数的构造函数(核心初始化逻辑)
  17.     public Person(string name, int age)
  18.     {
  19.         Name = name;
  20.         Age = age;
  21.         Console.WriteLine("带两个参数的构造函数被调用");
  22.     }
  23. }
复制代码
调用示例
  1. var p1 = new Person();          // 会先调用 Person("未知", 0),再执行无参构造函数的逻辑
  2. var p2 = new Person("张三");    // 会先调用 Person("张三", 0),再执行对应构造函数的逻辑
  3. var p3 = new Person("李四", 20); // 直接调用带两个参数的构造函数
复制代码
这种写法的优势是:当需要修改初始化逻辑时,只需修改一个核心构造函数,而不是在多个构造函数中重复修改

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

本版积分规则

Archiver|手机版|小黑屋|知识库Knowledge

GMT+8, 2025-12-11 07:12 , Processed in 0.017767 second(s), 18 queries .

Powered by Discuz! X5.0

© 2001-2025 Discuz! Team.

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