C# 如果我没有';我的程序中不需要这个实例吗?
假设我有一些需要实例化的单例。在构造函数中,它启动计时器,并每秒更新一些模型数据 要执行单例构造函数,我只需要引用它。我不需要结果实例,因为我不需要对singleton执行任何操作,它应该在整个应用程序执行期间存在 但是c#不允许这样的构造:C# 如果我没有';我的程序中不需要这个实例吗?,c#,C#,假设我有一些需要实例化的单例。在构造函数中,它启动计时器,并每秒更新一些模型数据 要执行单例构造函数,我只需要引用它。我不需要结果实例,因为我不需要对singleton执行任何操作,它应该在整个应用程序执行期间存在 但是c#不允许这样的构造:WcfLoader.Instance 所以我必须使用这个WcfLoader loader=WcfLoader.Instance但我从不使用loader实例 这看起来很奇怪,这是否意味着我做错了什么?向类中添加一个静态Init方法,然后调用WcfLoader.
WcfLoader.Instance代码>
所以我必须使用这个WcfLoader loader=WcfLoader.Instance代码>但我从不使用loader
实例
这看起来很奇怪,这是否意味着我做错了什么?向类中添加一个静态Init方法,然后调用WcfLoader.Init而不是获取实例。它看起来一点也不奇怪。在类中添加一个静态Init方法,然后调用WcfLoader.Init而不是获取实例。它看起来一点也不奇怪。不要让它成为获取实例
属性的副作用。获取属性不应有副作用
在singleton上添加一个方法InitTimer()
或类似的方法。不要让这成为获取实例属性的副作用。获取属性不应有副作用
在singleton上添加一个方法InitTimer()
或类似的方法。您还可以使用实例构造函数:
public class WcfLoader {
static WcfLoader _instance;
public WcfLoader() {
if ( _instance == null ) {
// do the initialization
_instance = this;
}
}
}
然后,初始化包括调用构造函数,甚至不将引用存储在任何地方
// just create a new object which causes the initialization code to execute
new WcfLoader();
当然,显式初始化方法(如其他人所述)是最佳选择。您也可以使用实例构造函数:
public class WcfLoader {
static WcfLoader _instance;
public WcfLoader() {
if ( _instance == null ) {
// do the initialization
_instance = this;
}
}
}
然后,初始化包括调用构造函数,甚至不将引用存储在任何地方
// just create a new object which causes the initialization code to execute
new WcfLoader();
当然,显式初始化方法(如其他人所述)是最佳选择。事实上,如您所说创建Init方法,甚至在singleton的instance属性中使用它。@oscilatingcretin我认为调用Init作为instance
属性getter的副作用不是一个好主意。为什么不呢?就像if(_whatever==null)Init();返回任何东西
事实上,像你说的那样创建Init方法,甚至在singleton的instance属性中使用它。@oscilatingcretin我不认为调用Init作为instance
属性getter的副作用是个好主意。为什么不呢?就像if(_whatever==null)Init();返回任何东西代码>