Maison  >  Article  >  développement back-end  >  Pourquoi les classes singleton en C# sont-elles toujours scellées ?

Pourquoi les classes singleton en C# sont-elles toujours scellées ?

王林
王林avant
2023-08-29 08:21:05630parcourir

Le mot-clé

为什么 C# 中的单例类总是密封的?

sealed signifie que la classe ne peut pas être héritée. Déclarer le constructeur comme privé signifie qu'aucune instance de la classe ne peut être créée.

Vous pouvez avoir une classe de base avec un constructeur privé tout en héritant de cette classe de base, définir des constructeurs publics et instancier efficacement la classe de base.

Les constructeurs ne sont pas hérités (les classes dérivées ne le sont donc pas simplement parce que la classe de base. a tous les constructeurs privés) et la classe dérivée appelle toujours le constructeur de la classe de base en premier.

Marquer une classe comme scellée empêche quelqu'un de travailler autour de votre classe singleton soigneusement construite, car cela empêche quelqu'un d'hériter de la classe.

Exemple

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer