当我第一次开始使用面向对象的编程语言时,我被教导了以下规则:
在类中声明字段时,不要初始化它.在构造函数中执行此操作.
C#中的一个例子:
public class Test
{
private List l;
public Test()
{
l = new List();
}
}
但是当有人最近问我为什么这样做时,我无法想出一个理由.我并不熟悉C#(或其他编程语言)的内部工作原理,因为我相信这可以在所有OO语言中完成.
那么,为什么是这样呢?安全吗?属性?
如果您有多个构造函数,则可能需要将字段初始化为不同的值
在构造函数中初始化字段时,对于何时根据构造函数的其余部分进行初始化,不会产生混淆.对于单个类来说,这似乎是微不足道的,但是如果你有一个继承层次结构,并且在每个级别运行构造函数代码并访问超类字段,那么这一点就不那么简单了.
C#编译器将采用您内联的任何非静态成员初始化,并将其移动到构造函数中.换句话说:
class Test { Object o = new Object(); }
汇编到这个:
class Test { Object o; public Test() { this.o = new Object(); } }
我不确定其他语言的编译器如何处理这个问题,但就C#而言,这是一个风格问题,你可以自由地做任何你想做的事情. 请注意,静态字段的处理方式不同:请 阅读本文以获取更多相关信息.