none
Méthode d'extension, reflection et delegate RRS feed

  • Discussion générale

  • Bonjour.

    J'ai un problème avec les méthodes d'extension et les délégués.

    J'ai la classe et le délégué suivant:

    class myClass<T1, T2, T3>
    {
        delegate T3 Function(T1, T2);
        Function myfunction
    ;}
    

    Dans une classe d'extension, je définis:

    public static int operation(this ArrayList l, int a, int b)
    {...}
    

    J'aimerais utiliser la méthode Delegate.CreateDelegate() pour retrouver la fonction operation par réflection, d'autant plus que je dois définir une telle méthode pour d'autres objets que ArrayList qui ne partagent pas une interface ou une classe mère. Malheureusement, operation n'a pas la même signature que mon délégué. Ce qui est dommage, c'est que si j'avais écris le code directement pour obtenir le délégué, ça aurait fonctionné.

    J'ai essayé de modifier la classe myClass de la sorte:

    class myClass<T1,T2,T3>
    {
        delegate T3 fonction(T1 a, T2 b);
        delegate T3 fonctionX(object extended, T1 a, T2 b);
        fonction myFunction;
        fontcionX myExtendedFunction;
        object myExtendedObject;
    
        T3 compute(T1 a, T2 b)
        {
            return myExtendedFunction(myExtendedObject, a, b);
        }
    }

    Et j'utilise compute comme délégué du type fonction. Malheureusement, ça ne marche pas non plus car myExtendedObject est du type ArrayList et donc la signature ne colle pas vraiment (car le premier argument est un object).

    Je ne souhaite pas non plus ajouter un 4e paramètre de type à ma classe car après elle sera trop compliquée à instancier...

    Est-ce que je suis passé à côté de quelque chose avec la réflection?

    Merci de votre aide!

    • Type modifié Aurel Bera lundi 26 novembre 2012 11:34 Pas de reponse
    mardi 20 novembre 2012 08:06

Toutes les réponses