2011-02-09 82 views
6

he cambiado de clase base a abstract para un proyecto y ahora estoy recibiendo el siguiente error:"No se puede crear una instancia de la clase abstracta o interfaz" mensaje C# error

Cannot create an instance of the abstract class or interface

qué recibo el error porque no se permite nombrar una nueva instancia de una clase abstract?

newPlane = new Airplane_Abstract(name, position); 
+1

Lo adivinó correctamente. –

+1

framework guidelines framework guidelines framework guidelines guidelines guidelines – Will

+2

Cuando vuelvas y leas un poco acerca de las clases abstractas, te darás palmadas en la frente e irás "duh". http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx (primer punto de viñeta) –

Respuesta

18

No puede crear una instancia de una clase abstracta. Piense en ello como una interfaz que también puede contener cierta lógica de implementación. ¿Qué esperarías que ocurriera si llamaras a un método de instancia abstracto sin definición?

+0

Por supuesto, usted puede crear una instancia de una clase concreta que hereda la clase 'abstracta', y dicha instancia también puede decirse que es una instancia de la clase abstracta. –

+0

@JeppeStigNielsen: Una clase abstracta es una clase que declara métodos abstractos. No se puede crear una instancia de una clase abstracta (¡el compilador se lo dirá!), Por supuesto, * puede * crear instancias de subclases no abstractas, pero esa no es la pregunta (que se hizo hace casi seis años ...) ¿Cual es tu punto? –

+0

Es solo un comentario terminológico. Muchas personas llamarán también a una instancia de la subclase una instancia la clase base. Vea como ejemplo [esta respuesta en otro hilo de Eric Lippert] (http: // stackoverflow.com/a/5602284/1336654). Su respuesta es, por supuesto, totalmente correcta, solo quería decir que existe esta otra terminología que es común. –

5

No puede crear una instancia de una clase abstracta. Eso es lo que significa abstract.

13

Vi su pregunta anterior, en la que preguntaba sobre el significado de "pura virtual" (abstract en C#).

La razón por la que no se puede crear una instancia de una clase abstract es que presumiblemente tiene abstract miembros, con ninguna implementación. Así que decir que su clase es el siguiente:

abstract class Airplane_Abstract 
{ 
    public abstract int GetSomeInteger(); 
} 

A continuación, suponiendo que podría crear una instancia de una de ellas, se podría escribir código como este:

var airplane = new Airplane_Abstract(); 

// What would this be? 
int integer = airplane.GetSomeInteger(); 

Por supuesto, yo no le creo realmente tienen tener miembros abstractos en una clase abstracta. Pero la idea general de una clase abstracta es que es una que no puede existir por sí misma; debe definirse con mayor detalle en una clase que herede de él. Los miembros abstractos son la ilustración más obvia de por qué esto sería; podría haber otras razones.

Piense en Shape, por ejemplo. Este es un ejemplo bastante común de algo que tendría sentido como una clase abstracta. Realmente no puedes instanciar solo a Shape, ¿o sí? ("Crear una forma". "¿Qué tipo de forma?" "No amable. Solo una forma abstracta." Realmente no funciona, ¿verdad?)

+0

Explicación épica señor. :RE –

Cuestiones relacionadas