Fonction, interfaces héritées et dispatch
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 :
Code:
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 |
Quand j'appelle DoWork, quel que soit le type de l'argument, je passerai toujours dans la fonction Consume typée (IBaseInterface).
La façon moins élégante de coder cela serait de modifier DoWork comme ceci :
Code:
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 |
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 !
Si vous avez une idée... je suis preneur :)
Merci d'avance