我刚刚编写了一小段代码,让我感到震惊的是,在初始化我将通过属性公开和使用的成员变量时,我不确定哪种初始化方法是最佳实践.从以下两个示例中初始化我的成员变量的最佳方法是哪种,更重要的是为什么?
例1:
private string m_connectionString = ConfigurationManager.ConnectionStrings["ApplicationDefault"].ConnectionString;
private string m_providerName = ConfigurationManager.ConnectionStrings["ApplicationDefault"].ProviderName;
public string ConnectionString
{
get { return m_connectionString; }
set { m_connectionString = value; }
}
public string ProviderName
{
get { return m_providerName; }
set { m_providerName = value; }
}
public EntityClusterRefreshServiceDatabaseWorker()
{
}
Run Code Online (Sandbox Code Playgroud)
例2:
private string m_connectionString;
private string m_providerName;
public string ConnectionString
{
get { return m_connectionString; }
set { m_connectionString = value; }
}
public string ProviderName
{
get { return m_providerName; }
set { m_providerName = value; }
}
public EntityClusterRefreshServiceDatabaseWorker()
{
ConnectionString = ConfigurationManager.ConnectionStrings["ApplicationDefault"].ConnectionString;
ProviderName = ConfigurationManager.ConnectionStrings["ApplicationDefault"].ProviderName;
}
Run Code Online (Sandbox Code Playgroud)
注意:假设我没有在静态上下文中使用这些变量.
除了在基类构造函数调用重写成员的非常奇怪的情况下,在这种情况下,时序会改变:实例变量初始化器在基类构造函数调用之前运行,这显然无关紧要.之后执行构造函数体.
在后一种情况下,您可以使用自动实现的属性使代码更简单:
public string ConnectionString { get; set; }
public string ProviderName { get; set; }
public EntityClusterRefreshServiceDatabaseWorker()
{
// Code as before
ConnectionString = ...;
ProviderName = ...;
}
Run Code Online (Sandbox Code Playgroud)
您无法使用第一个表单执行此操作,因为自动实现的属性无法指定初始值.
(您可能还需要考虑使制定者私有的,但是这是一个独立的问题.)
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |