Joh*_*las 12 c# constructor initialization
可能重复:
在构造函数或声明中初始化类字段?
我们正在争论编码实践.这里的例子有点过于简单,但真正的交易有几个构造函数.为了初始化简单值(例如日期到它们的最小值),我已经将代码移出构造函数并进入字段定义.
public class ConstructorExample
{
string _string = "John";
}
public class ConstructorExample2
{
string _string;
public ConstructorExample2()
{
_string = "John";
}
}
Run Code Online (Sandbox Code Playgroud)
这本书怎么做?我倾向于非常具体,所以对这种事情可能有点松懈.但是我觉得occams razor告诉我将初始化移出多个构造函数.当然,我总是可以将这个共享初始化转移到私有方法中.
问题本质上是...正在初始化定义它们的字段而不是构造函数以任何方式变坏?
我所面临的论点是错误处理之一,但我不认为它是相关的,因为没有可能的异常在编译时不会被接收.
ang*_*son 17
请注意,对于每个构造函数链,所有此类字段声明级初始化都将执行一次,即使构造函数本身将字段设置为其他内容也是如此.
如果将构造函数链接在一起,则将在调用的common,first构造函数中初始化字段.
看看这个例子:
using System;
namespace ClassLibrary3
{
public class Class1
{
private string _Name = "Lasse";
public Class1()
{
}
public Class1(int i)
: this()
{
}
public Class1(bool b)
{
_Name = "Test";
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码编译如下:
using System;
namespace ClassLibrary3
{
public class Class1
{
private string _Name;
public Class1()
{
_Name = "Lasse"
}
public Class1(int i)
: this()
{
// not here, as this() takes care of it
}
public Class1(bool b)
{
_Name = "Lasse"
_Name = "Test";
}
}
}
Run Code Online (Sandbox Code Playgroud)
kem*_*002 14
初始化构造函数之外的值并不一定是坏的,这里有你遇到的问题:
string _string;
public ConstructorExample2()
{
_string = "John";
}
Run Code Online (Sandbox Code Playgroud)
如果您有多个构造函数,则必须记住
1.在每个构造函数中重新初始化_string
2.将逻辑分离为一个公共方法并在每个构造函数中调用该方法
3.使用其中的逻辑调用构造函数,从其他建设者.(链接构造函数)
现在这不一定是问题,但你必须记住这样做.通过在构造函数之外初始化它,它就完成了.这是你需要记住的一件事.