ホームページ >バックエンド開発 >C#.Net チュートリアル >C# のシングルトン クラスが常にシールされるのはなぜですか?

C# のシングルトン クラスが常にシールされるのはなぜですか?

王林
王林転載
2023-08-29 08:21:05644ブラウズ

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

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。