Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

เหตุใดคลาสซิงเกิลตันจึงถูกผนึกใน C # เสมอ


คีย์เวิร์ดปิดผนึกหมายความว่าคลาสไม่สามารถสืบทอดได้ การประกาศตัวสร้างเป็นส่วนตัวหมายความว่าไม่สามารถสร้างอินสแตนซ์ของคลาสได้

คุณสามารถมีคลาสฐานที่มีคอนสตรัคเตอร์ส่วนตัว แต่ยังคงสืบทอดจากคลาสฐานนั้น กำหนดคอนสตรัคเตอร์สาธารณะบางตัว และสร้างอินสแตนซ์คลาสฐานนั้นอย่างมีประสิทธิภาพ

คอนสตรัคเตอร์ไม่ได้รับการสืบทอด (ดังนั้นคลาสที่ได้รับจะไม่มีคอนสตรัคเตอร์ส่วนตัวทั้งหมดเพียงเพราะคลาสพื้นฐานมี) และคลาสที่ได้รับนั้นจะเรียกคอนสตรัคเตอร์คลาสพื้นฐานก่อนเสมอ

การทำเครื่องหมายชั้นเรียนที่ผนึกจะป้องกันไม่ให้บางคนทำงานเกี่ยวกับชั้นเรียนซิงเกิลตันที่สร้างขึ้นมาอย่างปราณีตของคุณเล็กน้อย เพราะจะป้องกันไม่ให้ผู้อื่นสืบทอดจากชั้นเรียน

ตัวอย่าง

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