为什么单例类总是用C#密封?

sealed关键字表示无法从该类继承。将构造函数声明为私有意味着无法创建该类的实例。

您可以拥有一个带有私有构造函数的基类,但是仍然继承自该基类,定义一些公共构造函数,并有效地实例化该基类。

构造函数不会被继承(因此,派生类不会仅因为基类就拥有所有私有构造函数),并且派生类始终会首先调用基类构造函数。

将类标记为密封可防止某人琐碎地处理您精心构造的单例类,因为它使某人无法从该类继承。

示例

static class Program {

   static void Main(string[] args){

      Singleton fromStudent = Singleton.GetInstance;

      fromStudent.PrintDetails("From Student");

      Singleton fromEmployee = Singleton.GetInstance;

      fromEmployee.PrintDetails("From Employee");

      Console.WriteLine("-------------------------------------");

      Singleton.DerivedSingleton derivedObj = new Singleton.DerivedSingleton();

      derivedObj.PrintDetails("From Derived");

      Console.ReadLine();

   }

}

public class Singleton {

   private static int counter = 0;

   private static object obj = new object();

   private Singleton() {

      counter++;

      Console.WriteLine("Counter Value " + counter.ToString());

   }

   private static Singleton instance = null;

   public static Singleton GetInstance{

      get {

         if (instance == null)

            instance = new Singleton();

         return instance;

      }

   }

   public void PrintDetails(string message){

      Console.WriteLine(message);

   }

   public class DerivedSingleton : Singleton {

   }

}

以上是 为什么单例类总是用C#密封? 的全部内容, 来源链接: utcz.com/z/316102.html

回到顶部