คีย์เวิร์ดปิดผนึกหมายความว่าคลาสไม่สามารถสืบทอดได้ การประกาศตัวสร้างเป็นส่วนตัวหมายความว่าไม่สามารถสร้างอินสแตนซ์ของคลาสได้
คุณสามารถมีคลาสฐานที่มีคอนสตรัคเตอร์ส่วนตัว แต่ยังคงสืบทอดจากคลาสฐานนั้น กำหนดคอนสตรัคเตอร์สาธารณะบางตัว และสร้างอินสแตนซ์คลาสฐานนั้นอย่างมีประสิทธิภาพ
คอนสตรัคเตอร์ไม่ได้รับการสืบทอด (ดังนั้นคลาสที่ได้รับจะไม่มีคอนสตรัคเตอร์ส่วนตัวทั้งหมดเพียงเพราะคลาสพื้นฐานมี) และคลาสที่ได้รับนั้นจะเรียกคอนสตรัคเตอร์คลาสพื้นฐานก่อนเสมอ
การทำเครื่องหมายชั้นเรียนที่ผนึกจะป้องกันไม่ให้บางคนทำงานเกี่ยวกับชั้นเรียนซิงเกิลตันที่สร้างขึ้นมาอย่างปราณีตของคุณเล็กน้อย เพราะจะป้องกันไม่ให้ผู้อื่นสืบทอดจากชั้นเรียน
ตัวอย่าง
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 {
}
}