2012-06-10 22 views
7

¿Estoy en lo cierto al declarar que un método abstract lo convierte automáticamente en virtual?¿Los métodos abstractos son virtuales?

Es decir, en las subclases puedo anularlo muchas veces y en tiempo de ejecución, se llamará al método correspondiente al tipo de tiempo de ejecución del objeto?

¿Es posible declarar un método abstracto no virtual? Es decir, ¿el método que debe implementarse en una subclase no abstracta y no puede ser anulado?

+0

posible duplicado de [¿Es cada función abstracta virtual en C#, en general?] (Http://stackoverflow.com/questions/391557/is-every-abstract-function-virtual-in-c-in-general) –

Respuesta

8

Sí, abstract methods are virtual por definición; deben ser reemplazable, a fin de realmente ser anulado por subclases:

Cuando una declaración de método de instancia incluye un modificador de abstract, se dice que el método a ser un método abstracto. Aunque un método abstracto es implícitamente también un método virtual, no puede tener el modificador virtual.

contrario no se puede declarar un método no virtual abstracto, porque si se pudiera, tendría un método que no pueda ser implementado y por lo tanto nunca puede ser llamado, por lo que es bastante inútil.

Sin embargo, si usted quiere tener una clase implemente un método abstracto, pero no permite que cualquiera de sus subclases para modificar su aplicación, que es donde sealed viene en un ejemplo:.

abstract public class AbstractClass 
{ 
    abstract public void DoSomething(); 
} 

public class BaseClass : AbstractClass 
{ 
    public sealed override void DoSomething() 
    { 
     Console.WriteLine("Did something"); 
    } 
} 

en cuenta que mientras que el resumen El método es (implícitamente) virtual, la implementación en la clase base concreta no es virtual (debido a la palabra clave sealed).

1

Sí, son virtuales. De lo contrario, no tendría forma de escribir la implementación para ellos.

Cuestiones relacionadas