Bonjour à tous,
Je suis bloqué sur un truc et je cherche à trouver une solution "élégante" :
J'ai une classe métier avec un point d'entrée DoWork qui attend un parametre typé as IInterfaceBase.
Dans cette classe j'ai deux fonctions privées : DoWorkA(arg as IInterfaceA) et DoWorkB(arg as IInterfaceB)
InterfaceA et InterfaceB héritent de IInterfaceBase.
J'aimerai que quand j'envoie un objet implémentant IInterfaceA dans DoWork, cela puisse router vers DoWorkA et quand j'envoie un objet implémentant IInterfaceB dans DoWork, j'aimerai qu'il aille dans DoWorkB.
Malheureusement, ça n'a pas l'air de fonctionner comme ça dans la vraie vie.
Voici le bout de code qui illustre mes propos :
Quand j'appelle DoWork, quel que soit le type de l'argument, je passerai toujours dans la fonction Consume typée (IBaseInterface).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Public Function DoWork(argument As IBaseInterface) As String Return Consume(argument) End Function Private Function Consume(int As IBaseInterface) As String Return "work for Base Interface Object" End Function Private Function Consume(int As IInheritedInterface) As String Return "work for inherited Interface Object" End Function
La façon moins élégante de coder cela serait de modifier DoWork comme ceci :
Le problème est que cet exemple est très simpliste. Quand on a plusieurs arguments typés "interface de base" ça peut vite devenir très moche. Et puis bon, j'ai bon espoir qu'il y ait une solution bien plus lisible que ça !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Public Function DoWork(argument As IBaseInterface) As String Select Case True Case TypeOf argument Is IInheritedInterface Return Consume(DirectCast(argument, IInheritedInterface)) Case TypeOf argument Is IBaseInterface Return Consume(DirectCast(argument, IBaseInterface)) End Select End Function
Si vous avez une idée... je suis preneur
Merci d'avance
Partager