Statische und versiegelte Klassenunterschiede

150
  1. Gibt es eine Klasse, die in einer statischen Klasse implementiert ist? meint:

    static class ABC : Anyclass
  2. Gibt es eine Klasse, die sowohl in der versiegelten als auch in der statischen Klasse vererbt werden kann?
    meint:

    static class ABC : AClass {}

    Und

    sealed class ABC : AClass {}

Darf ich mich irgendwie irren?

Saurabh Mahajan
quelle
statichat wirklich nichts damit zu tunsealed
ken2k
1
Aber @ ken2k, statische Klassen sind in C # standardmäßig versiegelt. Sind sie nicht? statische Klassen nehmen überhaupt nicht an der Vererbung teil.
RBT
In Verbindung stehender Beitrag - Warum kann ich keine statischen Klassen erben?
RBT

Antworten:

654

Dies kann Ihnen helfen:

+--------------+---+-------------------------+------------------+---------------------+
|  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
quelle
1
Genial. Vielen Dank für die schnelle Antwort @HosseinNarimaniRad. Ich hatte Sie am Morgen selbst positiv bewertet, da die Informationen sowieso korrekt waren, aber es war nur ein Formatierungsproblem. Übrigens, Ihre Antwort verdient die akzeptierte Antwort von dem Moment an, als sie veröffentlicht wurde, aber es scheint, dass wir mehr darauf warten müssen :)
RBT
Sort haben interessant, an andere Typen zu denken, basierend darauf. Wie einige root class, die geerbt und instanziiert werden können, aber nicht erben können. Ich
bin
static class Foo : object { }ist gültig, ist aber im Wesentlichen static class Foo { }.
Themenfeld
39

In einfachen Worten

Statische Klasse

Eine Klasse kann als statisch deklariert werden, was darauf hinweist, dass sie nur statische Elemente enthält. Es ist nicht möglich, Instanzen einer statischen Klasse mit dem neuen Schlüsselwort zu erstellen. Statische Klassen werden automatisch von der Common Language Runtime (CLR) von .NET Framework geladen, wenn das Programm oder der Namespace mit der Klasse geladen wird.

Versiegelte Klasse

Eine versiegelte Klasse kann nicht als Basisklasse verwendet werden. Versiegelte Klassen werden hauptsächlich verwendet, um eine Ableitung zu verhindern. Da sie niemals als Basisklasse verwendet werden können, können einige Laufzeitoptimierungen das Aufrufen versiegelter Klassenmitglieder etwas beschleunigen.

Parimal Raj
quelle
19

Sie können eine sealedKlasse von einer anderen Klasse erben lassen , aber Sie können nicht von einer sealedKlasse erben :

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

Eine staticKlasse kann nicht von anderen Klassen erben.

C.Evenhuis
quelle
3

Sie können beide einfach unterscheiden als:

       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
quelle
3

Eine einfache Antwort ist, dass eine versiegelte Klasse nicht als Basisklasse verwendet werden kann .

Ich versuche Ihnen zu zeigen, dass die versiegelte Klasse eine abgeleitete Klasse im folgenden Code ist

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

und auf eine andere versiegelte Funktion kann nur mit einer Instanz zugegriffen werden (Sie können nicht davon erben).

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

    }
}
Amin Saadati
quelle
1

Versiegelte Klassen:

  1. Kann Instanzen erstellen, aber nicht erben
  2. Kann sowohl statische als auch nicht statische Elemente enthalten.

Statische Klassen:

  1. Kann ihre Instanzen weder erstellen noch erben
  2. Kann nur statische Mitglieder haben.
Vishal Verma
quelle
0

1 - Nein, Sie können keine statische Klasse implementieren.

2 - Nein, Sie können nicht von einer statischen oder versiegelten Klasse erben

Smaiil
quelle
4
Vielleicht können Sie dazu eine kleine Erklärung hinzufügen.
Abdul