在C#中,为什么字段初始化器语法不会抛出编译错误,但是,方法调用呢?例如,
class SomeOtherClass {
void SomeMethod() { }
}
class SomeClass {
SomeOtherClass someOtherObject = new SomeOtherClass();
someOtherObject.SomeMethod();
}
为什么someOtherObject初始化,本质上是一个构造函数调用工作?我的理解是构造函数也是一种方法。但是,存在方法调用的第二行不起作用。这是语言设计的选择吗?
答案 0 :(得分:2)
SomeOtherClass someOtherObject = new SomeOtherClass();
无论如何都是语法糖:
SomeOtherClass someOtherObject;
public SomeClass() {
someOtherObject = new SomeOtherClass()
}
因此在构造函数之外不执行任何操作。如果编译器不存在并初始化 someOtherObject ,编译器将创建一个空构造函数。
答案 1 :(得分:0)
一个类仅包含属性和方法 声明和定义。当你正在做
时,可以在那里初始化属性SomeOtherClass someOtherObject = new SomeOtherClass();
并在构造函数中。
否则
someOtherObject.SomeMethod();
既不是声明/定义也不是初始化。这是不允许的。