Różnice klas statycznych i zamkniętych

150
  1. Czy istnieje klasa, która ma zostać zaimplementowana w klasie statycznej? znaczy:

    static class ABC : Anyclass
  2. Czy istnieje klasa, która może być dziedziczona zarówno w klasie zapieczętowanej, jak i statycznej?
    znaczy:

    static class ABC : AClass {}

    I

    sealed class ABC : AClass {}

Czy w jakimś stopniu mogę się mylić?

Saurabh Mahajan
źródło
staticnie ma z tym nic wspólnegosealed
ken2k
1
Ale @ ken2k, klasy statyczne są domyślnie zapieczętowane w języku C #. Prawda? klasy statyczne w ogóle nie uczestniczą w dziedziczeniu.
RBT

Odpowiedzi:

654

To może ci pomóc:

+--------------+---+-------------------------+------------------+---------------------+
|  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
źródło
1
Niesamowite. Dzięki za szybką odpowiedź @HosseinNarimaniRad. Głosowałem za tobą samego ranka, ponieważ informacje były i tak poprawne, ale był to tylko problem z formatowaniem. Przy okazji, twoja odpowiedź zasługuje na to, aby być akceptowaną odpowiedzią od momentu jej opublikowania, ale wydaje się, że będziemy musieli na to dłużej czekać :)
RBT
Sortuj warto pomyśleć o innych typach, w oparciu o to. Podobnie jak niektóre, root classktóre mogą być dziedziczone i tworzone, ale nie mogą dziedziczyć. Nie jestem pewien, dlaczego
miałoby
static class Foo : object { }jest ważny, ale zasadniczo static class Foo { }.
themefield
39

W prostych słowach

Klasa statyczna

Klasę można zadeklarować jako statyczną, co oznacza, że ​​zawiera tylko statyczne elementy członkowskie. Nie jest możliwe tworzenie instancji klasy statycznej przy użyciu słowa kluczowego new. Klasy statyczne są ładowane automatycznie przez środowisko wykonawcze języka wspólnego (CLR) platformy .NET Framework podczas ładowania programu lub przestrzeni nazw zawierającej klasę.

Klasa zapieczętowana

Klasa zapieczętowana nie może być używana jako klasa bazowa. Klasy zapieczętowane służą przede wszystkim do zapobiegania wyprowadzaniu. Ponieważ nigdy nie można ich używać jako klasy bazowej, niektóre optymalizacje w czasie wykonywania mogą nieco przyspieszyć wywoływanie zapieczętowanych elementów członkowskich.

Parimal Raj
źródło
19

Można pozwolić sealedklasy dziedziczą z innej klasy, ale nie można dziedziczyć z pomocą sealedklasy:

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

staticKlasa nie może dziedziczyć z innych klas.

C.Evenhuis
źródło
3

Możesz po prostu rozróżnić oba z nich jako:

       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
źródło
3

Prosta odpowiedź brzmi: klasa zapieczętowana nie może być używana jako klasa bazowa .

Próbuję ci pokazać, że zapieczętowana klasa jest klasą pochodną w poniższym kodzie

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

a inna zapieczętowana funkcja jest dostępna tylko z instancją z niej. (nie można jej dziedziczyć)

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

    }
}
Amin Saadati
źródło
1

Klasy zamknięte:

  1. Może tworzyć instancje, ale nie może dziedziczyć
  2. Może zawierać statyczne i niestatyczne elementy członkowskie.

Klasy statyczne:

  1. Nie może ani tworzyć swoich instancji, ani ich dziedziczyć
  2. Może mieć tylko statyczne elementy członkowskie.
Vishal Verma
źródło
0

1 - Nie, nie możesz zaimplementować klasy statycznej.

2 - Nie, nie możesz dziedziczyć z klasy statycznej lub zapieczętowanej

Smaiil
źródło
4
Być może możesz dodać do tego małe wyjaśnienie.
abdul