C# 如果我没有';我的程序中不需要这个实例吗?

C# 如果我没有';我的程序中不需要这个实例吗?,c#,C#,假设我有一些需要实例化的单例。在构造函数中,它启动计时器,并每秒更新一些模型数据 要执行单例构造函数,我只需要引用它。我不需要结果实例,因为我不需要对singleton执行任何操作,它应该在整个应用程序执行期间存在 但是c#不允许这样的构造:WcfLoader.Instance 所以我必须使用这个WcfLoader loader=WcfLoader.Instance但我从不使用loader实例 这看起来很奇怪,这是否意味着我做错了什么?向类中添加一个静态Init方法,然后调用WcfLoader.

假设我有一些需要实例化的单例。在构造函数中,它启动计时器,并每秒更新一些模型数据

要执行单例构造函数,我只需要引用它。我不需要结果实例,因为我不需要对singleton执行任何操作,它应该在整个应用程序执行期间存在

但是c#不允许这样的构造:
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();返回任何东西