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 :

CustomAttribute, utilisation d'un délégué


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Août 2010
    Messages : 188
    Par défaut CustomAttribute, utilisation d'un délégué
    Bonjour.

    Je tente en ce moment d’exécuter un délégué défini dans le CustomAttribute d'une propriété.
    Dit comme ça c'est pas très clair ...

    voici des exemples de mon code.
    la définition de mon CustomAttribute :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class CustomAttribute : Attribute
    {
            public CustomAttribute (Func<object[], object> func)
            {
                this.Func = func;
            }
     
            public Func<object[], object> Func { get; set; }
    }

    l'utilisation de mon CustomAttribute :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class MyClass
    {
            [CustomAttribute (?delegate?)]
            public object MyProperty { get; set; }
    }

    l'utilisation de mon delegate :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void MyMethod(object obj)
    {
            CustomAttribute att = obj as CustomAttribute;
            if (att != null)
            {
                    object x = att.Func(null);
     
                    ...
            }
    }

    Définition de mon CustomAttribute c'est clair en tête.
    Exécuter mon delegate dans une méthode, pas difficile.
    Le point sur lequel je bloque est comment dire que ma propriété Func du CustomAttribute de MyProperty est tel fonction ou tel delegate, mais avant toute chose, est-il possible de le faire dans cette optique.

    Merci pour vos retour.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Août 2010
    Messages : 188
    Par défaut
    Bon je vient de voir un peu partout que cette solution est impossible.

    Heureusement pour moi, une idée me vient en tête.

    Passer en argument le nom de ma fonction.
    Ma méthode récupère la classe parente de ma propriété utilisant mon CustomAttribute et exécute cette fonction.

    Vos impressions ?

  3. #3
    Membre actif
    Homme Profil pro
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Par défaut
    Bonjour,

    avant de te donner un avis pro ou contre, quel est ton besoin ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Août 2010
    Messages : 188
    Par défaut
    Je parcoure toutes les propriétés d'une instance de class possédant mon CustomAttribute.

    Pour toutes, je doit exécuter une fonction.
    Mon bout de code exécutant les méthodes ne connais jamais à l'avance le nom de la fonction ni ce qu'elle font ou retourne comme object.

    Je test mais je croit que mettre en paramètres une propriété MethodInfo pourrait tout résoudre.
    Utilisable tout aussi facilement avec .Invoke .

    [EDIT]Ou pas ... [/EDIT]

  5. #5
    Membre actif
    Homme Profil pro
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Par défaut
    et tes instances sont de différents types je suppose ? tu en as beaucoup ? ils ne sont pas mutualisables ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Août 2010
    Messages : 188
    Par défaut
    Pour le moment je n'ai qu'un seul type d'instance de classe.
    Je ne sait pas d'avance combien je pourrais en avoir. Tout dépend des clients ?

    Du coup je me suis fait un petit système tout bête (qui fonctionne et a résolu mon problème soit dit en passant ^^)

    Mon CustomAttribute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class CustomAttribute : Attribute
    {
            public string MethodName { get; set; }
    }
    Ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class MyClass
    {
            public object MyMethod(object[] params)
            {
                    ...
            }
     
            [CustomAttribute (MethodName = "MyMethod")]
            public object MyProperty { get; set; }
    }
    Ma méthode utilisant le système :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public void MyMethod(object instance)
    {
            CustomAttribute att = obj as CustomAttribute;
            if (att != null)
            {
                    object value;
     
                    if (!string.IsNullOrEmpty(att.MethodName)
                    {
                            Type t = instance.GetType();
                            MethodInfo method = t.GetMethod(att.MethodName);
                            value = method.Invoke(instance, new object[] { myObjects });
                    }
     
                    if (object != null)
                    {
                            ...
                    }
            }
    }
    bien évidement le paramètre instance est une instance de ma classe MyClass

    Seul contrainte, ma méthode doit être dans la même classe que ma propriété. Dans le cas d'une utilisation en récurrence, c'est déjà plus délicat, mais je n'est pas de récurrence de prévu ... pour le moment .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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