仅具有静态成员而不是使其静态的非静态类的任何原因



我昨天接受了一次采访,其中一个问题是什么是单例以及如何实现它。

MSDN 的实现

MSDN 的解决方案 #1:

using System;
public class Singleton
{
   private static Singleton instance;
   private Singleton() {}
   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

我给出了最简单的解决方案(msdn 实现中的解决方案 1),而他想要线程安全的解决方案(解决方案 3)。

MSDN 的解决方案 #3:

using System;
public sealed class Singleton
{
   private static volatile Singleton instance;
   private static object syncRoot = new Object();
   private Singleton() {}
   public static Singleton Instance
   {
      get 
      {
         if (instance == null) 
         {
            lock (syncRoot) 
            {
               if (instance == null) 
                  instance = new Singleton();
            }
         }
         return instance;
      }
   }
}

让我感兴趣的是 msdn 示例中的私有构造函数。我不知道有这样的事情存在。

看看 msdn 上它

public class Counter
{
    private Counter() { }
    public static int currentCount;
    public static int IncrementCount()
    {
        return ++currentCount;
    }
}

然后我问:

为什么你会有一个只有静态成员的类,因此想要防止它的实例被创建,从而使用私有构造函数 - 而不是使类成为静态的?!

PS:问题不是关于单例 - 是关于描述一个场景,其中我会选择创建一个仅具有静态成员的可实例化类(因此最终需要私有构造函数)而不是使用静态类。

为什么你会有一个只有静态成员的类,因此会 喜欢防止创建它的实例,因此用于 私有构造函数 - 而不是使类成为静态

在静态类上使用单例

的主要区别在于,您可以在前者上实现接口,并按原样传递它,而无需绑定到单例的具体实现细节,而静态类则不能。

除此之外,单例实例变量必须是静态的,并且可以作为常规实例成员公开。

相关内容

  • 没有找到相关文章

最新更新