Différences de classes statiques et scellées

150
  1. Existe-t-il une classe implémentée dans une classe statique? veux dire:

    static class ABC : Anyclass
  2. Existe-t-il une classe qui peut être héritée à la fois dans une classe scellée et une classe statique?
    veux dire:

    static class ABC : AClass {}

    Et

    sealed class ABC : AClass {}

Puis-je me tromper dans une certaine mesure?

Saurabh Mahajan
la source
staticn'a vraiment rien à voir avecsealed
ken2k
1
Mais @ ken2k, les classes statiques sont scellées par défaut en C #. N'est-ce pas? les classes statiques ne participent pas du tout à l'héritage.
RBT

Réponses:

654

Cela peut vous aider:

+--------------+---+-------------------------+------------------+---------------------+
|  Class Type  |   | Can inherit from others | Can be inherited | Can be instantiated | 
|--------------|---|-------------------------+------------------+---------------------+
| normal       | : |          YES            |        YES       |         YES         |
| abstract     | : |          YES            |        YES       |         NO          |
| sealed       | : |          YES            |        NO        |         YES         |
| static       | : |          NO             |        NO        |         NO          |
+--------------+---+-------------------------+------------------+---------------------+
Hossein Narimani Rad
la source
1
Impressionnant. Merci pour la réponse rapide @HosseinNarimaniRad. Je vous avais voté pour le matin même car les informations étaient de toute façon correctes mais c'était juste un problème de formatage. Btw, votre réponse mérite d'être la réponse acceptée à partir du moment où elle a été publiée mais il semble que nous devrons attendre plus pour cela :)
RBT
Sort a intéressant de penser à d'autres types, sur la base de cela. Comme certains root classqui peuvent être hérités et instanciés, mais ne peuvent pas hériter. Je ne sais pas pourquoi cela serait utile, mais quand même
AustinWBryan
static class Foo : object { }est valide, mais l'est essentiellement static class Foo { }.
themefield
39

En mots simples

Classe statique

Une classe peut être déclarée statique, indiquant qu'elle ne contient que des membres statiques. Il n'est pas possible de créer des instances d'une classe statique à l'aide du mot clé new. Les classes statiques sont chargées automatiquement par le Common Language Runtime (CLR) .NET Framework lorsque le programme ou l'espace de noms contenant la classe est chargé.

Classe scellée

Une classe scellée ne peut pas être utilisée comme classe de base. Les classes scellées sont principalement utilisées pour empêcher la dérivation. Comme ils ne peuvent jamais être utilisés comme classe de base, certaines optimisations d'exécution peuvent accélérer légèrement l'appel de membres de classe scellés.

Parimal Raj
la source
19

Vous pouvez laisser une sealedclasse hériter d'une autre classe, mais vous ne pouvez pas hériter d' une sealedclasse:

sealed class MySealedClass : BaseClass // is ok
class MyOtherClass : MySealedClass     // won't compile

Une staticclasse ne peut pas hériter d'autres classes.

C.Evenhuis
la source
3

Vous pouvez simplement les différencier comme suit:

       Sealed Class       |        Static Class
--------------------------|-------------------------
it can inherit From other | it cannot inherit From other
classes but cannot be     | classes as well as cannot be
inherited                 | inherited
Abdul
la source
3

La réponse simple est qu'une classe scellée ne peut pas être utilisée comme classe de base .

J'essaie de montrer que la classe scellée est une classe dérivée dans le code ci-dessous

 public sealed class SealedClass : ClassBase
{
    public override void Print()
    {
        base.Print();
    }
}

et une autre fonctionnalité scellée n'est accessible qu'avec une instance de celle-ci (vous ne pouvez pas en hériter)

 class Program
{
    static void Main(string[] args)
    {
        SealedClass objSeald = new SealedClass();
        objSeald.Name = "Blah blah balh";
        objSeald.Print();

    }
}
Amin Saadati
la source
1

Classes scellées:

  1. Peut créer des instances, mais ne peut pas hériter
  2. Peut contenir des membres statiques et non statiques.

Classes statiques:

  1. Ne peut ni créer leurs instances, ni en hériter
  2. Peut avoir des membres statiques uniquement.
Vishal Verma
la source
0

1 - Non, vous ne pouvez pas implémenter une classe statique.

2 - Non, vous ne pouvez pas hériter d'une classe statique ou scellée

Smaiil
la source
4
Peut-être pouvez-vous ajouter une petite explication à ce sujet.
abdul le