Redéfinition (override) de méthodes
Certaines méthodes peuvent être redéfinies par des méthodes personnalisées. Pour qu’une méthode puisse être redéfinie, elle doit impérativement être déclarée avec l’attribut virtual.
Redéfinition#
Prenons l’exemple de la méthode déclenchée lors de la consommation d’alcool par un joueur :
public virtual void OnPlayerConsumeAlcohol(Player player, int itemId, float alcoholValue) { }La redéfinition est plus simple qu’un abonnement à une action car la correspondance des paramètres est déjà indiquée dans la fonction de base.
| Type de paramètre | Correspondance |
|---|---|
| player | Le joueur qui consomme de l’alcool |
| itemId | L’identifiant de l’objet consommé |
| alcoholValue | La quantité d’alcool consommée |
Il ne nous reste plus qu’à créer la même fonction, avec le même nom et les mêmes paramètres, et à lui appliquer l’attribut override :
public override void OnPlayerConsumeAlcohol(Player player, int itemId, float alcoholValue) { }Grâce à override, cette nouvelle fonction remplacera celle définie dans la classe de base, et l’ancienne version ne sera plus exécutée.
Exécution de la méthode de base#
Si vous souhaitez que la méthode originale s’exécute en complément, vous devez appeler explicitement la méthode de base avec :
base.OnPlayerConsumeAlcohol(player, itemId, alcoholValue);Cela permet de conserver le comportement défini dans la classe parente avant ou après l’exécution du code personnalisé.
Exemple#
public override void OnPlayerConsumeAlcohol(Player player, int itemId, float alcoholValue)
{
Debug.Log("Ce message apparaît avant l'exécution de la méthode de base");
base.OnPlayerConsumeAlcohol(player, itemId, alcoholValue);
Debug.Log("Ce message apparaît après l'exécution de la méthode de base");
}Dans cet exemple :
- Le premier
Debug.Logs’affichera en premier - La méthode de base
OnPlayerConsumeAlcoholsera exécutée - Le deuxième
Debug.Logs’affichera en dernier