Delegate générique [C#] - C#/.NET managed - Programmation
Marsh Posté le 25-10-2009 à 16:31:25
Salut,
Merci pour ta réponse, je ne connaissais pas ces techniques très pratiques.
En revanche, pour ce qui est du but de la manœuvre c'est simplement d'éviter de déclarer 1 méthode par delegate.
Dans mon cas c'est pour l'ajout d'un contrôle, et je me retrouve avec des méthodes du genre :
Code :
|
"EmptyCallback" et un type void(); mais j'ai plusieurs autres delegate differentes.
Je fais aussi des surcharge de cette methode (AddControl) pour pouvoir prendre un tableau de Keys.
Je me retrouve donc avec 2 méthodes AddControl par type de delegate.
Avec 10 types de delegate par exemple, je vous laisse imaginer le carnage ...
Je cherche simplement a clarifier le code car la je trouve ca très sale.
Autrement la technique de déclaration présentée par Fred82 est intéressante mais, le fait de mettre ses attributs en public n'est pas contraire au concept objet ? (encapsulation tout ca)
Merci pour votre aide !
Marsh Posté le 24-10-2009 à 14:44:30
Bonjour,
Je reviens a la charge pour une question de plus sur la généricité en C#, je penses que c'est la dernière
Voici le contexte :
J'ai créé 2 classes pour ce test unitaire :
- GenericCallbacks :
Elle stock un pointeur de méthode et l'appel quand on lui demande.
- TestDelegate :
Elle crée des GenericCallbacks ainsi que les méthodes de test a attacher aux delegates.
Voici le code complet compilable, j'exposerai le problème après :
GenericCallbacks :
TestDelegate :
Un main de test :
La problématique est la suivante :
Comment éviter de créer autant de constructeurs que de type de delegate dans la classe GenericCallbacks ?
Dans l'exemple je n'en ai que 2, mais dans le vrai programme qui me pose soucis j'en ai environ 10, en sachant que j'ai 1 surcharges pour chacun des types de delegates ce qui donne 20 surcharge de la même méthode d'ajout !
Dans mon cas, même si c'est moche, ca peut marcher, mais je n'ose pas imaginer le développeur qui se retrouve avec 250 prototypes possibles pour ses delegates.
J'ai essaye de faire prendre au constructeur un type System.Delegate mais ca ne fonctionne pas.
J'ai beau chercher un type générique capable de contenir un pointeur sur méthode mais je n'en trouve pas.
Voila, merci pour votre aide !
Message édité par Stnaire le 24-10-2009 à 14:45:01