min*_*nda 28 c# constructor initialization variable-assignment
A类使用初始化列表将成员设置为参数值,而B类使用构造函数体内的赋值.
只要我保持一致,任何人都可以给出任何理由而不喜欢一个吗?
class A
{
String _filename;
A(String filename) : _filename(filename)
{
}
}
Run Code Online (Sandbox Code Playgroud)
class B
{
String _filename;
B(String filename)
{
_filename = filename;
}
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 81
第一个在C#中不合法.在构造函数中冒号之后可以出现的唯一两个项是base和this.
所以我会选择第二个.
Jer*_*ell 17
你的意思是C++而不是C#?
对于C++,初始化列表优于赋值,原因如下:
从C# 7.0 开始,有一种方法可以使用表达式体来简化它:
A(String filename) => _filename = filename;
Run Code Online (Sandbox Code Playgroud)
(虽然有两个字段看起来更好):
A(String filename, String extension) => (_filename, _extension) = (filename, extension);
Run Code Online (Sandbox Code Playgroud)