Heim  >  Artikel  >  Backend-Entwicklung  >  Warum sind Singleton-Klassen in C# immer versiegelt?

Warum sind Singleton-Klassen in C# immer versiegelt?

王林
王林nach vorne
2023-08-29 08:21:05630Durchsuche

Das Schlüsselwort „sealed“ bedeutet, dass die Klasse nicht vererbt werden kann. Die Deklaration des Konstruktors als privat bedeutet, dass keine Instanz der Klasse erstellt werden kann.

为什么 C# 中的单例类总是密封的?Sie können eine Basisklasse mit einem privaten Konstruktor haben und dennoch von dieser Basisklasse erben, einige öffentliche Konstruktoren definieren und die Basisklasse effektiv instanziieren hat alle privaten Konstruktoren) und die abgeleitete Klasse ruft immer zuerst den Basisklassenkonstruktor auf.

Das Markieren einer Klasse als versiegelt verhindert, dass jemand Ihre sorgfältig erstellte Singleton-Klasse umgehen kann, da dadurch verhindert wird, dass jemand von der Klasse erbt.

Beispiel

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

Das obige ist der detaillierte Inhalt vonWarum sind Singleton-Klassen in C# immer versiegelt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen