最好在构造函数中为服务初始化私有成员变量,如下所示:
public partial class DataPumpService : ServiceBase
{
private TaskManager _taskManager;
public DataPumpService()
{
InitializeComponent();
_taskManager = new TaskManager();
}
或者只是在课堂上这样:
public partial class DataPumpService : ServiceBase
{
private TaskManager _taskManager = new TaskManager();
public DataPumpService()
{
InitializeComponent();
}
或者它没有区别吗?
答案 0 :(得分:1)
确实有所不同。两者都在对象实例化时间内初始化(即您完全保证在其他代码对象被消耗之前将初始化类字段)。差异在于(a quote from MSDN):
类的实例字段变量初始值设定项对应于a 进入后立即执行的分配顺序 该类的任何一个实例构造函数(第10.10.1节)。 变量初始值设定项以文本顺序执行 它们出现在类声明中。
也就是说,如果你有一个像下面这样的类:
public class A
{
public string text = "hello";
public A()
{
text = "world";
}
}
...并且您创建了A
的实例,text
将保留world
。
在我的情况下,我根据用例使用这两种方法。无论如何,我倾向于在构造函数中进行初始化,以便快速发现类字段初始化的位置(因为其他类字段应该使用属性setter而不是类来初始化)直接领域......我错了!?)。
答案 1 :(得分:0)
这里几乎没有区别。使用哪种方式。
但是如果再添加一个带参数的构造函数。 class
中的Initialize成员变量将为每个构造函数生成重复的IL
代码。
因此,当有多个构造函数时,初始化的最佳方法是将公共初始化放在一个构造函数中,让其他构造函数通过this(...)
调用此构造函数。