Sì, abstract methods are virtual per definizione; essi devono essere override per poter effettivamente essere sovrascritto dalle sottoclassi:
Quando una dichiarazione metodo di istanza include un modificatore abstract
, tale metodo è detto essere un metodo astratto. Anche se un metodo astratto è implicitamente anche un metodo virtuale, non può avere il modificatore virtual
.
Al contrario non è possibile dichiarare un metodo astratto non virtuale, perché se si potesse, si avrebbe un metodo che non può essere implementato e quindi non può mai essere chiamato, rendendolo piuttosto inutile.
Tuttavia, se si vuole avere una classe implementa un metodo astratto, ma non consente alcuna delle sue sottoclassi di modificare la sua attuazione, è lì che sealed
viene in Un esempio:.
abstract public class AbstractClass
{
abstract public void DoSomething();
}
public class BaseClass : AbstractClass
{
public sealed override void DoSomething()
{
Console.WriteLine("Did something");
}
}
Si noti che mentre l'astratto il metodo è (implicitamente) virtuale, l'implementazione nella classe base concreta non è virtuale (a causa della parola chiave sealed
).
possibile duplicato di [È ogni funzione astratta virtuale in C#, in generale?] (Http://stackoverflow.com/questions/391557/is-every-abstract-function-virtual-in-c-in-general) –