L'héritage multiple est-il possible dans VB .Net? Si oui, quelle est la syntaxe?L'héritage multiple est-il possible dans VB .Net?
Répondre
Réponse courte: Non
Légèrement plus Réponse: Oui, si vous héritez plusieurs interfaces, et une seule classe de base. Puisque c'est généralement la raison de MI (vous voulez implémenter plusieurs interfaces), c'est généralement suffisant. Cependant, dans les rares cas où le MI «réel» est utile, .NET vous empêche de le faire.
Il est possible de manière restreinte dans VB.Net de la même manière qu'en C#: via Interfaces. Comme une interface est essentiellement une classe de base pure-abstraite, vous pouvez en hériter autant que vous le souhaitez et d'une classe réelle.
Probablement ce que vous voulez faire est vraiment la composition ou l'agrégation (voir here for design pattern). Peut-être que vous définissez un comportement. Vous pouvez toujours implémenter une interface SomeInterface dans la classe de base, avoir un membre de type SomeInterface (qui laisse n'importe quelle classe implémentant SomeInterface et donc avoir le code implémentant), dans le constructeur des membres passer une référence à la classe de base celui-ci le possède si nécessaire (si c'est le cas, essayez d'ajouter une autre interface pour définir les callbacks, la classe de base l'implémentera et la sous-classe l'aura comme type de variable membre). Utilisez les appels à la classe membre pour implémenter SomeInterface. De cette façon, le code est implémenté dans une autre classe, ce qui le rend facile à maintenir, mais vous ne faites pas d'héritage multiple.
L'idée derrière la composition est qu'un moteur n'est pas une voiture mais une voiture a un moteur. La voiture a besoin d'un moteur, mais n'a pas besoin de savoir comment fonctionne l'ensemble d'un moteur, mais comment l'interfacer. Donc, le moteur ne devrait pas hériter de la voiture. Mais avoir la voiture mettre en œuvre le moteur est stupide. Ainsi, la voiture reçoit un moteur en tant que membre de la voiture entière, mais en tant qu'objet. La voiture a un moteur dans le cadre de sa composition.
On dirait que ce que vous faites est plus un comportement, comme un objet de canard qui a un comportement de charlatan, mais les canards en caoutchouc sont des canards, mais ne coulez pas mais coulez. Donc, ils diffèrent des objets de canard colvert, mais les deux ont de nombreuses autres caractéristiques de canard en commun. Donc vous voulez avoir une interface de charlatan que chacun implémente différemment. Mais beaucoup de canards se chargent de cette interface, donc vous ne voulez pas avoir à écrire des charlatans pour chacun d'entre eux. C'est là que vous utilisez la composition pour implémenter l'interface de comportement de charlatan.
Pour autant que je sais VB.net ne supporte pas l'héritage multiple en général, mais vous pouvez atteindre une sorte d'héritage multiple en travaillant avec des interfaces (en utilisant « Met en œuvre » au lieu de « Hérite »):
Public Class ClassName
Implements BaseInterface1, BaseInterface2
End Class
Cela fonctionne bien pour les classes mais j'aimerais avoir une interface héritant de certaines interfaces de base. Quelque chose comme ça:
Public Interface InterfaceName
Implements BaseInterface1, BaseInterface2
End Interface
Mais le mot-clé "Implements" n'est pas autorisé pour les interfaces (ce qui est logique, bien sûr). J'ai essayé d'utiliser une sorte de classe abstraite que je sais de Java:
Public MustInherit Class InterfaceName
Implements BaseInterface1, BaseInterface2
End Class
Mais maintenant, je dois mettre en œuvre les méthodes définies de BaseInterface1 et BaseInterface2 dans la classe InterfaceName. Mais comme InterfaceName doit être une interface, je ne veux pas non plus implémenter ces méthodes dans cette classe.
En C#, vous pouvez le faire assez facile:
public interface InterfaceName: BaseInterface1, BaseInterface2 {}
- 1. Structuremap dans VB .Net (WebForms)
- 2. chaîne équation vb .net
- 3. Diffusion de types dans VB .NET
- 4. Html.ValidationSummary multiple dans une seule page .Net MVC?
- 5. VB .NET: Informations sur l'utilisateur enregistré
- 6. Comment utiliser AfxOleGetMessageFilter dans un programme VB .NET?
- 7. Est-il possible d'utiliser MSBuild pour créer un projet .NET 1.1 VB avec Crystal Reports?
- 8. Fonction luminosité/exposition avec vb .net
- 9. ASP.NET VB - Quelques maths avec .NET
- 10. VB .NET Création de colonnes supplémentaires dans Gridviews
- 11. Construction de propriétés dynamiques à l'exécution dans VB .NET
- 12. Relation multiple à multiple Subsonic 3 (SimpleRepository)
- 13. Événement de raccourci pour l'application entière VB .Net
- 14. Conception multi-processus Chrome/IE8, est-ce possible dans .NET?
- 15. MSN Messenger comme notification - Connaissez-vous des exemples dans .NET VB .NET ou C#?
- 16. Modèles Dans VB
- 17. String.Format dans vb
- 18. Utilisation de HTTPWebRequest dans ASP.NET VB
- 19. Conversion de retour de rendement C# en VB .NET
- 20. Sauvegarde multiple dans NHibernate (2.1)
- 21. multiple mysql_real_query() dans while loop
- 22. Activer un contrôle d'une autre application avec User32 (vb .net)
- 23. Installshield 2009 Multiple Serial Keys
- 24. Multiple Add in IE
- 25. Dictionnaire de valeur multiple
- 26. Existe-t-il un analogue des partiels Rails dans VB .NET?
- 27. Comment concevoir un SMS SENDER en utilisant VB .NET
- 28. Rechercher le handle du menu d'une autre application (vb .net)
- 29. ASP/VB .NET Formatage de chaque ligne d'une grille?
- 30. SÉLECTIONNER un élément dans le style d'affichage à sélection multiple sans permettre la sélection multiple
Héritant une interface est pas vraiment héritage si ... –
@Orion Edwards: comment est-ce pas? L'héritage définit la relation «est un», et les interfaces sont une façon de définir ce qu'est un objet «est». Si j'hérite ISerializable, je dis "je suis un ISerializable", et me traiter comme un ISerializable fonctionne comme prévu. –
En plus du commentaire de @Harper Shelby, une application volontaire de ce type de restriction est généralement considérée comme une bonne pratique en C++ (au lieu d'interfaces vous auriez des classes de base abstraites). – Richard