一文说通C#12的主构造方法

💡 原文中文,约4500字,阅读约需11分钟。
📝

内容提要

C# 12引入了主要构造函数的概念,可以简化类定义和减少代码重复。主要构造函数可以直接在类声明中初始化成员变量,并自动生成相应的构造方法和属性。这个特性提高了代码的紧凑性和可读性。

🔎

延伸解读

主构造方法如何简化代码

文章通过对比传统写法和主构造方法,展示了主构造方法能减少重复代码。传统方式需要分别定义字段和构造方法,并在构造方法中赋值;而主构造方法允许在类声明中直接使用参数初始化字段,或在成员中直接引用参数,使代码更紧凑。例如,使用主构造方法后,类定义从多行简化为一行,且无需显式声明私有字段。

编译后的实际行为

文章借助Sharplab.io展示了主构造方法编译后的代码。编译时,主构造方法会转换为普通构造方法,用于初始化字段。如果参数在初始化程序之外被引用,编译器会自动生成字段来存储参数值,以便在其它成员中使用。这表明主构造方法并非运行时特性,而是编译时的语法糖,最终生成的IL与手写代码类似。

参数验证的实现方式

文章指出,可以在主构造方法中实现参数验证。例如,在初始化字段时使用空合并运算符抛出异常,编译后这些验证逻辑会出现在生成的构造方法中。这保证了参数的有效性,同时保持了代码的简洁性。但需注意,验证逻辑应放在初始化表达式中,而非构造方法体内,因为主构造方法没有显式的构造方法体。

可变参数与使用注意

文章提到,主构造方法的参数是可变的,可以在成员方法中修改。例如,在SetInfo方法中直接对参数赋值,会修改编译器生成的隐藏字段,从而影响后续使用。这提供了灵活性,但也可能带来意外副作用,因为参数不再是只读的。开发者需明确参数的作用域和生命周期,避免误用。

❓

Q&A

C# 12的主构造方法有什么特点?

主构造方法允许在类声明中直接初始化成员变量,并自动生成构造方法和属性,简化类定义,减少代码重复。

如何使用主构造方法初始化成员变量?

可以在类声明中直接使用参数初始化成员,例如:public class Custom(string name, string mobile) { private readonly string _name = name; }。

主构造方法的参数可以修改吗?

是的,主构造方法的参数是可变的,可以在类中通过方法修改这些参数的值。

主构造方法在编译时如何处理?

主构造方法在编译时会转为普通构造方法,用于初始化字段,确保类的成员变量得到正确赋值。

在主构造方法中如何进行参数验证?

可以在主构造方法中加入验证逻辑,例如检查参数是否为null,确保输入有效。

主构造方法如何提高代码的可读性?

通过减少重复代码和简化类定义,主构造方法使得代码更紧凑,易于理解,从而提高可读性。

🏷️

标签

➡️

继续阅读