En Visual Basic .NET, l'héritage est réalisé avec le mot-clé Inherits. Cela permet de créer des hiérarchies de classes implémentant des méthodes et des propriétés communes et redéfinissables.
Pour supporter le polymorphisme, les méthodes de la classe de base sont déclarées avec le modificateur Overridable, et dans la classe dérivée, elles sont redéfinies avec Overrides. Pour empêcher toute redéfinition ultérieure, le modificateur NotOverridable est utilisé.
Exemple :
' Classe de base Animal avec méthode virtuelle Public Class Animal Public Overridable Sub Speak() Console.WriteLine("L'animal fait un bruit.") End Sub End Class ' Dérivé Dog redéfinit Speak Public Class Dog Inherits Animal Public Overrides Sub Speak() Console.WriteLine("Le chien aboie.") End Sub End Class Sub Main() Dim a As Animal = New Dog() a.Speak() ' Affichera : Le chien aboie. End Sub
Q : Peut-on redéfinir des méthodes en Visual Basic .NET qui ne sont pas déclarées comme Overridable/Abstract dans la classe de base ?
R : Non. Seules les méthodes marquées comme Overridable ou déclarées via une interface/abstraction peuvent être redéfinies lors de l'héritage. Une tentative d'utiliser Overrides pour une méthode normale générera une erreur de compilation.
' Erreur : Public Class A Public Sub Foo() End Sub End Class Public Class B Inherits A Public Overrides Sub Foo() ' Erreur de compilation End Sub End Class
Histoire
1. Dans un projet réel lié à une architecture de microservices, un nouveau membre de l'équipe a déclaré une méthode virtuelle comme ordinaire (sans Overridable) dans la classe de base contrôleur. Plus tard, un autre développeur a tenté de redéfinir cette méthode pour un traitement spécifique. Cela a entraîné un duplicata de logique et des bugs, car l'implémentation parentale était toujours appelée, malgré la présence de la méthode dans la classe dérivée.
Histoire
2. Une architecture insuffisamment conçue et une absence d'utilisation du polymorphisme ont conduit à des centaines de lignes de code redondant : en cas d'ajout d'un nouvel héritier, il était nécessaire de réécrire une grande partie de la méthode de la classe de base, au lieu de simplement implémenter le Override requis. Cela a compliqué la maintenance et le support.
Histoire
3. Un cas d'application d'entreprise : lors de la migration vers .NET Core, le développeur a marqué une méthode comme Overridable, mais a omis par erreur d'ajouter Implements de l'interface. Cela a entraîné une ambiguïté dans la résolution des méthodes dans la hiérarchie d'héritage et a causé des problèmes lors de l'appel via une référence à l'interface, ce qui a conduit à un fonctionnement défaillant.