ver*_*ald 3 c# static-constructor syntactic-sugar
考虑:
class Foo
{
static Foo()
{
// Static initialisation
}
}
Run Code Online (Sandbox Code Playgroud)
为什么()需要static Foo() {...}?静态构造函数必须始终是无参数的,为什么要这么麻烦?它们是否有必要避免一些解析器歧义,或者只是为了保持与常规无参数构造函数的一致性?
由于它看起来非常像初始化块,我经常发现自己意外地将它们排除在外,然后不得不考虑几秒钟的错误.如果他们可以以同样的方式被淘汰将是很好的.
我经常遇到这样的问题; 也就是说,"编译器可能会发现这个东西丢失了,那么为什么需要呢?" 这是这类问题的另一个例子:
正如我在那个问题中所指出的,基本上我们在这种情况下有三种选择.使所需的冗余文本,使其成为可选,或使其成为非法.
每个都有自己的缺点.
使其成为必需的缺点是您最终会在语言中出现不必要的冗余.
使它成为可选项的缺点是你会混淆那些认为两种形式之间必须存在差异的人.此外,您使错误恢复解析器更难以完成其工作; 它在冗余方面蓬勃发展.而且你可能会在将来添加新的语言功能变得更加困难,因为已经声称更多的"语法区域".
使它成为非法的缺点是你做了一个"陷阱",用户必须记住哦,是的,我应该把parens放在这里,但不是在这里.
建议的功能最好有一个上行支付下行.在我看来,最小的缺点是第一个:让它成为必需品.其他选择我希望有一个好处,证明下行,我在这里没有看到一个.