Diferenças de classe estática e selada

150
  1. Existe alguma classe que seja implementada na classe estática? significa:

    static class ABC : Anyclass
  2. Existe alguma classe que possa ser herdada na classe selada e na classe estática?
    significa:

    static class ABC : AClass {}

    E

    sealed class ABC : AClass {}

Posso estar errado em alguma extensão?

Saurabh Mahajan
fonte
statictem realmente nada a ver comsealed
ken2k
1
Mas @ ken2k, classes estáticas são seladas por padrão em C #. Não são? classes estáticas não participam de herança.
RBT

Respostas:

654

Isso pode ajudá-lo a:

+--------------+---+-------------------------+------------------+---------------------+
|  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
fonte
1
Impressionante. Obrigado pela pronta resposta @HosseinNarimaniRad. Eu votei em você de manhã, pois as informações estavam corretas, mas era apenas uma questão de formatação. Aliás, a sua resposta merece ser a resposta aceita a partir do momento em que foi publicado, mas parece que vai ter que esperar mais para que :)
RBT
É interessante pensar em outros tipos, com base nisso. Como alguns root classque podem ser herdados e instanciados, mas não podem herdar. Não tenho certeza por que isso seria útil, mas ainda assim
AustinWBryan
static class Foo : object { }é válido, mas é essencialmente static class Foo { }.
themefield
39

Em palavras simples

Classe estática

Uma classe pode ser declarada estática, indicando que ela contém apenas membros estáticos. Não é possível criar instâncias de uma classe estática usando a nova palavra-chave. As classes estáticas são carregadas automaticamente pelo CLR (Common Language Runtime) do .NET Framework quando o programa ou espaço para nome que contém a classe é carregado.

Classe selada

Uma classe selada não pode ser usada como uma classe base. Classes seladas são usadas principalmente para evitar derivações. Como eles nunca podem ser usados ​​como classe base, algumas otimizações em tempo de execução podem tornar a chamada de membros selados da classe um pouco mais rápida.

Parimal Raj
fonte
19

Você pode deixar uma sealedclasse herdar de outra classe, mas não pode herdar de uma sealedclasse:

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

Uma staticclasse não pode herdar de outras classes.

C.Evenhuis
fonte
3

Você pode simplesmente diferenciar os dois como:

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

A resposta simples é que uma classe selada não pode ser usada como classe base .

Estou tentando mostrar que a classe selada é uma classe derivada no código abaixo

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

e outro recurso selado só pode ser acessado com instância. (você não pode herdar dele)

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

    }
}
Amin Saadati
fonte
1

Classes seladas:

  1. Pode criar instâncias, mas não pode herdar
  2. Pode conter membros estáticos e não estáticos.

Classes estáticas:

  1. Não pode criar suas instâncias nem herdá-las
  2. Pode ter apenas membros estáticos.
Vishal Verma
fonte
0

1 - Não, você não pode implementar uma classe estática.

2 - Não, você não pode herdar de uma classe estática ou selada

Smaiil
fonte
4
Pode ser que você possa adicionar uma pequena explicação sobre isso.
abdul