Pourquoi déclarer une méthode comme "virtuelle" ?
Quel est l'intérêt d'utiliser le virtuel ?
Pourquoi déclarer une méthode comme "virtuelle" ?
Quel est l'intérêt d'utiliser le virtuel ?
En Virtuel Le modificateur est utilisé pour indiquer qu'une méthode \property (ect) peut être modifiée dans une classe dérivée en utilisant la méthode surpasser modificateur.
Exemple :
class A
{
public virtual void Foo()
//DoStuff For A
}
class B : A
{
public override void Foo()
//DoStuff For B
//now call the base to do the stuff for A and B
//if required
base.Foo()
}
Le terme "virtuel" permet à une classe héritée de remplacer une méthode que la classe de base utilise ensuite.
public class Thingy
{
public virtual void StepA()
{
Console.Out.WriteLine("Zing");
}
public void Action()
{
StepA();
Console.Out.WriteLine("A Thingy in Action.");
}
}
public class Widget : Thingy
{
public override void StepA()
{
Console.Out.WriteLine("Wiggy");
}
}
class Program
{
static void Main(string[] args)
{
Thingy thingy = new Thingy();
Widget widget = new Widget();
thingy.Action();
widget.Action();
Console.Out.WriteLine("Press any key to quit.");
Console.ReadKey();
}
}
Lorsque vous exécutez le programme, vous obtenez le résultat suivant :
Zing
A Thingy in Action.
Wiggy
A Thingy in Action.
Remarquez que même si Widget a appelé la méthode Action() définie au niveau Thingy, Thingy a appelé en interne la méthode StepA() de Widget.
La réponse de base est que cela donne plus de flexibilité aux héritiers d'une classe. Bien entendu, vous devez bien concevoir votre classe, sinon elle risque de faire des ravages.
Le mot-clé virtuel est une méthode ou un Dans ce cas, la méthode ou la propriété est appelée membre virtuel. L'implémentation implémentation d'un membre virtuel peut être modifiée par un membre de substitution dans dans une classe dérivée.
Lorsqu'une méthode virtuelle est invoquée, le le type d'exécution de l'objet est vérifié s'il y a un membre en surcharge. Le membre de la classe la plus dérivée est appelé la plus dérivée est appelée, qui peut être le membre original, s'il n'y a pas de classe dérivée. membre original, si aucune classe dérivée n'a surchargé le membre. (Pour plus sur les types d'exécution et les classes les plus la plus dérivée, voir 10.5.3 Méthodes virtuelles).
Par défaut, les méthodes sont n Vous ne pouvez pas surcharger une méthode non virtuelle.
Vous ne pouvez pas utiliser le modificateur virtuel avec les modificateurs suivants :
statique abstrait surpasser
Les propriétés virtuelles se comportent méthodes abstraites, à l'exception des différences dans la syntaxe de déclaration et d'invocation. la syntaxe d'invocation.
- L'utilisation du modificateur virtuel sur une propriété statique est une erreur.
- Une propriété virtuelle héritée peut être remplacée dans une classe dérivée par incluant une déclaration de propriété qui utilise le modificateur override.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.