IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

createDelegate renvoie une exception


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut createDelegate renvoie une exception
    hello
    j ai une methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protected bool AlphaTest(COperation _OpToCheck)
            {
                Debug.WriteLine("AlphaTest");
                return true;
            }
    j ai aussi un delegate qui ressemble a ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected delegate bool CheckFunction(ICheckable _ObjectToCheck);
    Sachant que la classe COperation implemente ICheckable,
    je tente ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheckFunction F1 = (CheckFunction)Delegate.CreateDelegate(typeof(CheckFunction), method);
    (method etant le methodInfo de la fonction AlphaTest)

    mais j ai une exception de type : Erreur lors de la liaison avec la méthode cible. Qui peux me dire qu'est-ce qui genere cette erreure ? merci bcp bcp

    PS: je suis en .Net 3.5

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le prototype de la méthode appelée doit correspondre exactement au prototype du type délégué. Comme ce n'est pas le cas dans ton exemple, tu te retrouves avec cette exception

    Par contre, tu peux modifier ta méthode ainsi par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected bool AlphaTest(ICheckable _OpToCheck)
    {
        COperation operation = _OpToCheck as COperation
     
        if (operation == null)
        {
            throw new ArgumentException("Le type du paramètre est incorrect.", "_OpToCheck");
        }
     
        Debug.WriteLine("AlphaTest");
        return true;
    }

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    en changeant le type du paramètre comme conseillé, je retrouve la meme exception...

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par ZaaN Voir le message
    en changeant le type du paramètre comme conseillé, je retrouve la meme exception...
    Si tu modifies ton delegate comme ac :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected delegate bool CheckFunction<T>(T _ObjectToCheck) where T : ICheckable;
    Ça devrait rouler.

  5. #5
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    aaaarg ca change absoluement rien

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Tu pourrais mettre le code que tu utilises actuellement dans un exemple prêt à compiler, histoire de voir ce qui cloche. Parce que ma méthode ainsi que celle de Guulh (j'avais complétement zappé les génériques ^^) doivent fonctionner.

  7. #7
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par ZaaN Voir le message
    aaaarg ca change absoluement rien
    Tu dois pouvoir faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheckFunction<COperation> F1 = (CheckFunction<COperation>)Delegate. CreateDelegate(typeof(CheckFunction<COperation>), method);
    Mais ce n'est peut être plus assez abstrait.

    J'avais lu qq part que les designers de C# faisaient très gaffe avec la variance et contravariance, parce que ça pouvait très mal supporter le passage d'un framework à l'autre.

    i.e. si le fx propose en version 1.0 une méthode System.f(double d), puis rajoute une méthode f(int i) en version 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delegate void Truc(double d);
    Truc t = System.f; // vaudrait f(double) en v1 et f(int) en v2 si les delegates supportaient la variance
    D'où l'intérêt des contraintes et du mot clé where, à ce que j'ai compris.

Discussions similaires

  1. Erreur HttpWebResponse me renvoi une exception
    Par jubourbon dans le forum Framework .NET
    Réponses: 4
    Dernier message: 16/02/2012, 10h11
  2. erreur :"une exception s'est produite"
    Par leborg dans le forum ASP
    Réponses: 11
    Dernier message: 02/03/2004, 15h09
  3. [JSP] Affichage numéro de ligne d'une exception
    Par PhoneKilleR dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 23/09/2003, 14h59
  4. Réponses: 2
    Dernier message: 28/08/2003, 00h00
  5. Réponses: 3
    Dernier message: 01/11/2002, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo