Cod*_*gue 3 c# constructor object-initializers
在C#中,我可以有一个类,如:
class MyClass {
public void DoStuff();
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样初始化这个类:
MyClass mc = new MyClass();
Run Code Online (Sandbox Code Playgroud)
要么:
MyClass mc = new MyClass { };
Run Code Online (Sandbox Code Playgroud)
如果我不需要括号,并且没有对象初始化程序设置的属性,为什么我不能这样做?
MyClass mc = new MyClass;
Run Code Online (Sandbox Code Playgroud)
das*_*ght 11
你不能这样做,MyClass mc = new MyClass因为语言解析器的设计者决定不允许你这样做.事实上,他们相当慷慨地允许一对空的花括号:我猜他们采取这条路线比明确要求至少一个表达更容易.
new您提议的表达式结构中没有固有的东西可以禁止这样的语法:修改解析器以支持第三种替代方案不会花费太多精力.但是,这样做会与调用没有参数的非构造函数方法产生不一致.目前,省略括号使得它们在某些上下文中启用了具有特定语义的方法组.很难修改解析器以允许没有括号的无参数方法调用,因为它没有语法标记(请注意,当您调用构造函数时,new关键字扮演这样一个标记的角色).