2010-09-04 11 views
5

Solo una pequeña pregunta sobre C++/cli. Las clases abstractas tienen métodos abstractos para ser implementados por las clases derivadas, las clases selladas no permiten la herencia.Clases selladas abstractas

Entonces, ¿por qué tenemos algunas clases en la biblioteca de clases base .NET definidas como abstractas, y puedes encontrar muchas ... ??!

+0

ejemplos? Esta es una decisión de diseño interesante para mí, así que quería ver cuáles lo hicieron :) –

+0

http://msdn.microsoft.com/en-us/library/system.math.aspx –

Respuesta

15

Es equivalente a "clase estática" en el lenguaje C#. El lenguaje que se usó para escribir casi todas las clases de BCL. Todos los métodos deben ser estáticos. Declararlo abstracto y sellado evita que alguien se derive de la clase y cree una instancia de la misma.

Los métodos de clase son el equivalente exacto de las funciones gratuitas en el lenguaje C y C++. Algo que el CLR no admite.

+0

Estoy totalmente de acuerdo contigo, becuause parece la clase JAVA'S MATH, por ejemplo, pero ¿por qué la documentación de msdn indica que esto no es posible o correcto si puede hacerlo? –

+0

@Ebraheem Najjar: Solo es posible hacerlo directamente en el nivel IL. El compilador no le permitirá escribir directamente una clase 'abstract '. –

+0

Los atributos de IL en una clase son distintos de las palabras clave en el idioma. En C#, no tiene sentido declarar una clase sellada * y * abstracta, se quejará. Declararlo estático es lo que activa estos atributos IL. No hay un análogo de CLR para una clase "estática". –

2

Pueden no tanto abstracto y sellada, que no tiene sentido

Una clase cerrada no puede ser utilizado como una clase base. Por esta razón, tampoco puede ser una clase abstracta. Las clases selladas evitan 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 miembros de clase sellados sea un poco más rápido.

http://msdn.microsoft.com/en-us/library/ms173150.aspx

+0

quiso decir C++/cli. prueba public ref class CProperty sellado abstracto { }; –

+7

Una clase de C# estática es en realidad "abstracta sellada", aunque no se pueden usar explícitamente estos modificadores en el código. Pero el OP está hablando de C++/CLI, donde no hay concepto de clase estática –

Cuestiones relacionadas