网站转app生成器,电子商务网站建设与管理读后感,厦门网站推广公司,哈尔滨阿城网站建设我们上次提到主构造函数是 2014 年#xff0c;当时#xff0c; C# 6 和 VB 12 的候选列表上去掉了主构造函数。去年底#xff0c;主构造函数重新出现#xff0c;作为提案#2691 #xff0c;现在成为 C# 9 的一个候选项。主构造函数背后的基本思想是减少初始化类所需的样板代… 我们上次提到主构造函数是 2014 年当时 C# 6 和 VB 12 的候选列表上去掉了主构造函数。去年底主构造函数重新出现作为提案#2691 现在成为 C# 9 的一个候选项。主构造函数背后的基本思想是减少初始化类所需的样板代码量。class C(string x)
{public string X{get x;set { if (value null) throw new NullArgumentException(nameof(X)); x value; }}
}编译为…class C
{private string _x;public C(string x){_x x;}public string X{get x;set { if (value null) throw new NullArgumentException(nameof(X)); x value; }}
}Richard Gibson 对它们的用处进行了总结从我们 30 个类的代码库中快速抽样表明其中的 22 个73%已定义了显式构造函数而有 21 个95%什么也没做只是设置了私有只读字段人们很少阅读可以自动生成的代码通常被跳过因为它们通常看上去很傻因此它们常常是让人大吃一惊的错误来源。他继续解释道这些错误通常是因为不小心把构造函数参数赋给了错误的字段。这个概念跟我们在 C#和 VB 中更简单的不可变对象报告的记录提案有很大的重合。MgSam 写道该提案似乎与目前的记录提案完全不相容。我不同意提案中的说法提案提到这比记录更有用。我认为这可以节省一些样板记录而记录以及自动生成 GetHashCode、Equals 和 ToString 相关的功能在很多场景中有可能节约大量模板。HaloFour 也参与了该话题按照为 C#提出的记录方式它们包括对称构造和解构以及基于一组特定属性的识别。假设这些参数也是属性那么主构造函数把这些都放在一个参数列表中并且该列表给我们提供了一个可以解构这些属性的顺序。正如他们所提出的C#记录更像 Scala 的 case 类或 F#单例联合并且这两种语言都根据它们的构造方式定义构造。