Differenze di classe statiche e sigillate


150
  1. Esiste una classe da implementare in una classe statica? si intende:

    static class ABC : Anyclass
  2. Esiste una classe che può essere ereditata sia in classe sigillata che in classe statica?
    si intende:

    static class ABC : AClass {}

    E

    sealed class ABC : AClass {}

Posso sbagliarmi in qualche misura?


staticnon ha davvero nulla a che fare consealed
ken2k,

1
Ma @ ken2k, le classi statiche sono sigillate di default in C #. No? le classi statiche non partecipano affatto all'eredità.
RBT

Risposte:


654

Questo può aiutarti:

+--------------+---+-------------------------+------------------+---------------------+
|  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          |
+--------------+---+-------------------------+------------------+---------------------+

1
Eccezionale. Grazie per la pronta risposta @HosseinNarimaniRad. Ti avevo votato al mattino stesso poiché le informazioni erano comunque corrette ma si trattava solo di un problema di formattazione. A proposito, la tua risposta merita di essere la risposta accettata dal momento in cui è stata pubblicata, ma sembra che dovremo aspettare di più per questo :)
RBT

Ordinamento è interessante pensare ad altri tipi, in base a questo. Come alcuni root classche possono essere ereditati e istanziati, ma non possono ereditare. Non sono sicuro del perché sarebbe utile, ma comunque
AustinWryry

static class Foo : object { }è valido, ma essenzialmente static class Foo { }.
themefield

39

In parole semplici

Classe statica

Una classe può essere dichiarata statica, indicando che contiene solo membri statici. Non è possibile creare istanze di una classe statica utilizzando la nuova parola chiave. Le classi statiche vengono caricate automaticamente dal Common Language Runtime (CLR) di .NET Framework quando viene caricato il programma o lo spazio dei nomi contenente la classe.

Classe sigillata

Una classe sigillata non può essere utilizzata come classe base. Le classi sigillate sono utilizzate principalmente per prevenire la derivazione. Poiché non possono mai essere utilizzati come classe di base, alcune ottimizzazioni di runtime possono rendere leggermente più veloce la chiamata dei membri della classe sigillati.


19

Puoi consentire a una sealedclasse di ereditare da un'altra classe, ma non puoi ereditare da una sealedclasse:

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

Una staticclasse non può ereditare da altre classi.


3

Puoi semplicemente differenziarli entrambi come:

       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

3

La risposta semplice è che una classe sigillata non può essere utilizzata come classe base .

Sto cercando di mostrarti che la classe sigillata è una classe derivata nel codice seguente

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

e un'altra funzione sigillata è accessibile solo con istanza da essa (non è possibile ereditare da essa)

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

    }
}

1

Classi sigillate:

  1. Può creare istanze, ma non ereditare
  2. Può contenere membri statici e non statici.

Classi statiche:

  1. Non può né creare le loro istanze né ereditarle
  2. Possono avere solo membri statici.

0

1 - No, non puoi implementare una classe statica.

2 - No, non puoi ereditare da una classe statica o sigillata


4
Magari puoi aggiungere una piccola spiegazione al riguardo.
abdul,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.