|
|
1
7
它可以在继承情况下产生差异。请参见对象初始化顺序上的此链接:
因此,如果这是一个派生类,那么在初始化派生字段和运行构造函数之间初始化整个基对象。 |
|
|
2
1
没有太大的区别,我会和第一个保持一致,因为它更可读。通常变量是在类的顶部定义的,我可以去那里检查它们的默认值,而不是搜索一个构造函数并查看它是否设置了它。就编译器而言,没有区别,除非您有多个构造函数。 |
|
|
3
1
出于这个原因,我总是使用第一个:构造函数负责初始化变量。不同的构造函数可以不同地初始化变量。所以,是的,你应该觉得第二种方式是肮脏的。 |
|
|
4
1
我更喜欢第二种,在某些情况下,这取决于您的编码标准。但考虑处理顺序: 目标类字段初始化->基类字段初始化->基类构造函数->目标类构造函数 如果基类或目标类在创建对象时出现异常,并且字段已预初始化,则在完成时它将具有值,并且可能导致一些意外问题。 另见比尔·西姆瑟的博客 Best Practices and Member Initialization in C# |
|
|
5
0
对于int,根本不需要这样做,内部类型初始化为default()——对于int,它是0。 至于对象,我觉得这是个品味问题,我更喜欢前者。如果有人正在重写我的构造函数,我希望他们调用base()以正确的状态构造它。 |
|
|
6
0
您希望避免在构造函数的范围之外进行实例化,因为它显示了意图,特别是如果您要重写构造函数,那么您就有了更多的灵活性。 |
|
7
0
就白细胞介素而言,它们是相同的。 编译器将此转换为:
进入这个:
即使您自己添加这样的构造函数:
编译器将其转换为:
|
|
|
8
0
我对这个有不同的看法。我认为您应该抽象到属性并在构造函数中设置它们。使用自动属性基本上可以消除这个问题,因为您无法初始化它们(除了默认值之外)。
|