Computer >> Máy Tính >  >> Lập trình >> C#

Tại sao lớp singleton luôn bị đóng dấu trong C #?

Từ khóa niêm phong có nghĩa là lớp không thể được kế thừa từ. Khai báo các hàm khởi tạo là private có nghĩa là không thể tạo các phiên bản của lớp.

Bạn có thể có một lớp cơ sở với một phương thức khởi tạo riêng, nhưng vẫn kế thừa từ lớp cơ sở đó, xác định một số phương thức khởi tạo công khai và khởi tạo hiệu quả lớp cơ sở đó.

Các hàm tạo không được kế thừa (vì vậy lớp dẫn xuất sẽ không có tất cả các hàm tạo riêng chỉ vì lớp cơ sở có) và các lớp dẫn xuất luôn gọi các hàm tạo của lớp cơ sở trước tiên.

Đánh dấu lớp được niêm phong ngăn không cho ai đó làm việc vặt vãnh xung quanh lớp singleton được xây dựng cẩn thận của bạn vì nó ngăn không cho ai đó kế thừa từ lớp.

Ví dụ

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 {
   }
}