Diferencias de clase estáticas y selladas

150
  1. ¿Hay alguna clase que se implemente en clase estática? medio:

    static class ABC : Anyclass
  2. ¿Hay alguna clase que se pueda heredar tanto en clase sellada como en clase estática?
    medio:

    static class ABC : AClass {}

    Y

    sealed class ABC : AClass {}

¿Puedo estar equivocado en alguna medida?

Saurabh Mahajan
fuente
staticrealmente no tiene nada que ver consealed
ken2k
1
Pero @ ken2k, las clases estáticas están selladas por defecto en C #. ¿No son ellos? Las clases estáticas no participan en la herencia en absoluto.
RBT

Respuestas:

654

Esto puede ayudarlo 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
fuente
1
Increíble. Gracias por la pronta respuesta @HosseinNarimaniRad. Te había votado por la mañana ya que la información era correcta, pero solo era un problema de formato. Por cierto, su respuesta merece ser la respuesta aceptada desde el momento en que se publicó, pero parece que tendremos que esperar más para eso :)
RBT
Es interesante pensar en otros tipos, basados ​​en esto. Como algunos root classque pueden ser heredados e instanciados, pero no pueden heredar. No estoy seguro de por qué sería útil, pero aún así
AustinWBryan
static class Foo : object { }es válida, pero es esencialmente static class Foo { }.
themefield
39

En palabras simples

Clase estática

Una clase puede declararse estática, lo que indica que contiene solo miembros estáticos. No es posible crear instancias de una clase estática con la nueva palabra clave. Las clases estáticas se cargan automáticamente mediante .NET Framework Common Language Runtime (CLR) cuando se carga el programa o el espacio de nombres que contiene la clase.

Clase sellada

Una clase sellada no puede usarse como una clase base. Las clases selladas se utilizan principalmente para evitar la derivación. Debido a que nunca se pueden usar como una clase base, algunas optimizaciones de tiempo de ejecución pueden hacer que llamar a los miembros de la clase sellados sea un poco más rápido.

Parimal Raj
fuente
19

Puede dejar que una sealedclase herede de otra clase, pero no puede heredar de una sealedclase:

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

Una staticclase no puede heredar de otras clases.

C.Evenhuis
fuente
3

Simplemente puede diferenciarlos a ambos 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
fuente
3

La respuesta simple es que una clase sellada no puede usarse como una clase base .

Estoy tratando de mostrarle que la clase sellada es una clase derivada en el siguiente código

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

y otra característica sellada solo es accesible con instancia de ella (no puede heredar de ella)

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

    }
}
Amin Saadati
fuente
1

Clases selladas:

  1. Puede crear instancias, pero no puede heredar
  2. Puede contener miembros estáticos y no estáticos.

Clases estáticas:

  1. No puede crear sus instancias ni heredarlas
  2. Solo puede tener miembros estáticos.
Vishal Verma
fuente
0

1 - No, no puedes implementar una clase estática.

2 - No, no se puede heredar de una clase estática o sellada

Smaiil
fuente
44
Puede ser que pueda agregar una pequeña explicación al respecto.
abdul