|
在 C#中,this() 是构造函数之间的调用语法,用于在一个构造函数中调用同一个类中的另一个构造函数,这种机制称为构造函数链(ConstructorChaining)。 构造函数重载 调用:this 这样省略每次都写赋值操作,造成代码冗余 作用
- 减少代码重复:将多个构造函数的共同初始化逻辑集中到一个构造函数中,其他构造函数通过 this() 调用它
- 保证初始化一致性:确保对象在任何构造路径下都能得到正确初始化
语法规则
- this() 必须是构造函数体内的第一条语句
- 可以带参数(如 this("默认值")),用于匹配对应参数的构造函数
- 不能形成递归调用(如 A 调用 B,B 又调用 A)
示列代码:
- public class Person
- {
- public string Name { get; set; }
- public int Age { get; set; }
- // 无参构造函数
- public Person() : this("未知", 0) // 调用带两个参数的构造函数
- {
- // 这里可以添加额外逻辑(可选)
- Console.WriteLine("无参构造函数被调用");
- }
- // 带一个参数的构造函数
- public Person(string name) : this(name, 0) // 调用带两个参数的构造函数
- {
- // 额外逻辑(可选)
- }
- // 带两个参数的构造函数(核心初始化逻辑)
- public Person(string name, int age)
- {
- Name = name;
- Age = age;
- Console.WriteLine("带两个参数的构造函数被调用");
- }
- }
复制代码 调用示例
- var p1 = new Person(); // 会先调用 Person("未知", 0),再执行无参构造函数的逻辑
- var p2 = new Person("张三"); // 会先调用 Person("张三", 0),再执行对应构造函数的逻辑
- var p3 = new Person("李四", 20); // 直接调用带两个参数的构造函数
复制代码 这种写法的优势是:当需要修改初始化逻辑时,只需修改一个核心构造函数,而不是在多个构造函数中重复修改
|