A类使用初始化列表将成员设置为参数值,而B类使用构造函数体内的赋值。
只要我保持一致,任何人都可以给出任何理由而不喜欢一个吗?
class A
{
String _filename;
A(String filename) : _filename(filename)
{
}
}
class B
{
String _filename;
B(String filename)
{
_filename = filename;
}
}
答案 0 :(得分:78)
第一个在C#中不合法。构造函数中冒号后面只能出现的两个项目是base
和this
。
所以我会选择第二个。
答案 1 :(得分:17)
你的意思是C ++而不是C#?
对于C ++,初始化列表优于赋值,原因如下:
答案 2 :(得分:2)
从C# 7.0开始,有一种方法可以通过表达式主体来简化此过程:
A(String filename) => _filename = filename;
(尽管在两个字段中看起来更好):
A(String filename, String extension) => (_filename, _extension) = (filename, extension);
答案 3 :(得分:1)
C#有一个名为Object Initializer的功能。您可以提供编译器将用于初始化指定成员的值,并调用默认构造函数。为此,您需要有一个公共默认构造函数。