假设我有一些只需要实例化的单例。在构造函数中,它启动计时器,并每秒更新一些模型数据。
要执行单例构造函数,我只需要引用它。我不需要生成实例,因为我不需要对整个应用程序执行期间应该存在的单例执行任何操作。
但是c#不允许这样的构造:WcfLoader.Instance;
所以我必须使用这个WcfLoader loader = WcfLoader.Instance;
,但我从不使用loader
实例。
看起来很奇怪,这是否意味着我做错了什么?
答案 0 :(得分:3)
向您的类添加静态Init方法,然后调用WcfLoader.Init而不是获取实例。它看起来并不奇怪。
答案 1 :(得分:1)
不要将此作为获取Instance
属性的副作用。获得财产不应该有副作用。
在单身人士上添加方法InitTimer()
或类似的东西。
答案 2 :(得分:0)
您还可以参与实例构造函数:
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();
当然,显式初始化方法(如其他人所述)是最佳选择。