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# のシングルトン クラスが常にシールされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。