【问题标题】:Dispose the singleton object in .NET在 .NET 中处理单例对象
【发布时间】:2011-01-24 00:19:22
【问题描述】:

我有两个类 ClassA 和 ClassB 都引用了一个单例对象 ClassHelper。我的问题是,一旦我使用 ClassA 和 ClassB 完成后,我应该如何处理单例对象

编辑:

public ClassA
{
  CHelper obj;

  public ClassA()
  {
    obj = obj.GetInstance("Initialise");
    obj.CallFuncA();
  }
}

On the same lines
public ClassB
{
  CHelper obj;

  public ClassB()
  {
    obj = obj.GetInstance("Initialise");
    obj.CallFuncB();
  }
}


where 

CHelper
{
   private static sm_CHelper;

   public static GetInstance(string strInitialise)
   {
      if(sm_CHelper == null)
      {
         sm_CHelper = new CHelper(strInitialise);
      }
   }

   private CHelper(string strInitialise)
   {
      //do something here 
   }

   public CallFuncA()
   {
     // do something here
   }
   public CallFuncB()
   {
     // do something here
   }
}

问候 学习者

【问题讨论】:

标签: .net ooad


【解决方案1】:

我从未见过这样的例子。我可能会这样做:

 class Resource {

     static Resource Instance  = new Resource();
     static int count = 2;

     public Resource CheckOut() { 
        if (--count <= 0)
            Instance = null;
        return Instance;
     }
 }

这样,在 ClassA 和 ClassB 都检出资源之后,静态引用将停止保留它。在 ClassA 和 ClassB 失去对 Resource 的引用后,终结器将被调用下一轮垃圾回收。

【讨论】:

    【解决方案2】:

    该单例应该在应用程序期间保持活动状态。所以你在处理那些ClassA和ClassB的时候不应该把它处理掉。

    【讨论】:

      【解决方案3】:

      如果您在谈论模式 singelton,那么您不应该处置它....如果您没有提到 singelton 模式,那么您可以尝试使用解构器来运行您的处置逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 2021-12-03
        • 1970-01-01
        • 2016-01-17
        • 1970-01-01
        相关资源
        最近更新 更多