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
).
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) –