C# 构造函数内部或外部的成员初始化

C# 构造函数内部或外部的成员初始化,c#,.net,coding-style,C#,.net,Coding Style,两种初始化中哪一种更好 public class ServiceClass { private DataManager dataManager = new DataManager(); private Dictionary<string, string> stringDictionary = new Dictionary<string, string>(); private Dictionary<string, DateTime> ti

两种初始化中哪一种更好

public class ServiceClass
{
    private DataManager dataManager = new DataManager();
    private Dictionary<string, string> stringDictionary = new Dictionary<string, string>();
    private Dictionary<string, DateTime> timeDictionary = new Dictionary<string, DateTime>();
    public ServiceClass()
    {
        //other object creation code
    }
}
公共类服务类
{
专用DataManager DataManager=新DataManager();
私有字典stringDictionary=新字典();
私有字典timeDictionary=新字典();
公共服务类()
{
//其他对象创建代码
}
}

公共类服务类
{
专用数据管理器数据管理器;
私人词典;
私人词典;
公共服务类()
{
dataManager=新的dataManager();
stringDictionary=新字典();
timeDictionary=新字典();
//其他对象创建代码
}
}

因为在显式构造函数中有其他代码(“其他对象创建代码”),所以我更喜欢将所有初始化都放在那里。

我更喜欢使用构造函数

这是因为我们残酷地发现,通过序列化程序(在本例中是数据协定序列化程序)重建的对象没有调用其字段初始值设定项

此外,它确保所有初始化逻辑都相应地分组在一起,而不是潜在地散布在整个代码中(在您希望定义字段变量的地方)。

可能的重复
public class ServiceClass
{
    private DataManager dataManager;
    private Dictionary<string, string> stringDictionary;
    private Dictionary<string, DateTime> timeDictionary;
    public ServiceClass()
    {
       dataManager = new DataManager();
       stringDictionary = new Dictionary<string, string>();
       timeDictionary = new Dictionary<string, DateTime>();
       //other object creation code
    }
}