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 :

La reflexion


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1
    Par défaut La reflexion
    coucou,

    voila j\'ai un petit souci. Je dois faire un projet pour mon école et débute seulement le langage c# et je dois faire de la reflexion. J\'ai trouver un code sur msn qui fait normalement ce que je souhaite oui mais voila je n\'arrive pas acceder au méthode get/set a partir d\'une autre classe(il reconnait la classe mais pas les methodes).
    Si quelqu\'un pouvait m\'aider.

    Merci

    Le code pour creer ma dll :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    using System;
    using System.Reflection;
    using System.Reflection.Emit;
    using System.Threading;
     
    namespace ReflectionEmit
    {
        class ClassTestReflectionE
        {
     
            static void Main(string[] args)
            {
                AppDomain myDomain = Thread.GetDomain();
                AssemblyName myAsmName = new AssemblyName();
                myAsmName.Name = \"MyDynamicAssembly\";
     
                // To generate a persistable assembly, specify AssemblyBuilderAccess.RunAndSave.
                AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(myAsmName,
                                                                AssemblyBuilderAccess.RunAndSave);
                // Generate a persistable single-module assembly.
                ModuleBuilder myModBuilder =
                    myAsmBuilder.DefineDynamicModule(myAsmName.Name, myAsmName.Name + \".dll\");
     
                TypeBuilder myTypeBuilder = myModBuilder.DefineType(\"CustomerData\",
                                                                TypeAttributes.Public);
     
                FieldBuilder customerNameBldr = myTypeBuilder.DefineField(\"customerName\",
                                                                typeof(string),
                                                                FieldAttributes.Private);
     
                // The last argument of DefineProperty is null, because the
                // property has no parameters. (If you don\'t specify null, you must
                // specify an array of Type objects. For a parameterless property,
                // use an array with no elements: new Type[] {})
                PropertyBuilder custNamePropBldr = myTypeBuilder.DefineProperty(\"CustomerName\",
                                                                 PropertyAttributes.HasDefault,
                                                                 typeof(string),
                                                                 null);
     
                // The property set and property get methods require a special
                // set of attributes.
                MethodAttributes getSetAttr =
                    MethodAttributes.Public | MethodAttributes.SpecialName |
                        MethodAttributes.HideBySig;
     
                // Define the \"get\" accessor method for CustomerName.
                MethodBuilder custNameGetPropMthdBldr =
                    myTypeBuilder.DefineMethod(\"get_CustomerName\",
                                               getSetAttr,
                                               typeof(string),
                                               Type.EmptyTypes);
     
                ILGenerator custNameGetIL = custNameGetPropMthdBldr.GetILGenerator();
     
                custNameGetIL.Emit(OpCodes.Ldarg_0);
                custNameGetIL.Emit(OpCodes.Ldfld, customerNameBldr);
                custNameGetIL.Emit(OpCodes.Ret);
     
                // Define the \"set\" accessor method for CustomerName.
                MethodBuilder custNameSetPropMthdBldr =
                    myTypeBuilder.DefineMethod(\"set_CustomerName\",
                                               getSetAttr,
                                               null,
                                               new Type[] { typeof(string) });
     
                ILGenerator custNameSetIL = custNameSetPropMthdBldr.GetILGenerator();
     
                custNameSetIL.Emit(OpCodes.Ldarg_0);
                custNameSetIL.Emit(OpCodes.Ldarg_1);
                custNameSetIL.Emit(OpCodes.Stfld, customerNameBldr);
                custNameSetIL.Emit(OpCodes.Ret);
     
                // Last, we must map the two methods created above to our PropertyBuilder to 
                // their corresponding behaviors, \"get\" and \"set\" respectively. 
                custNamePropBldr.SetGetMethod(custNameGetPropMthdBldr);
                custNamePropBldr.SetSetMethod(custNameSetPropMthdBldr);
     
     
                Type retval = myTypeBuilder.CreateType();
     
                // Save the assembly so it can be examined with Ildasm.exe,
                // or referenced by a test program.
                myAsmBuilder.Save(myAsmName.Name + \".dll\");
     
     
            }
        }
    }

  2. #2
    Membre chevronné Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Par défaut
    euh il doit pas compiler ton code, à cause du \"
    pour la reflection moi j'utilise cà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    object result = this.ClasseParent.GetType().InvokeMember(nom, BindingFlags.GetProperty
                                                | BindingFlags.Default | BindingFlags.InvokeMethod,
                                                null, this.ClasseParent, null);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.ClasseParent.GetType().GetProperty(...));
    this.ClasseParent.GetType().GetMethod(...)
    Je sais pas si c'est la bonne méthode, mais en tout cas ca marche chez moi ^^

Discussions similaires

  1. [VB.NET]Reflexion lister les membres d'une classe ...presque
    Par lucie.houel dans le forum ASP.NET
    Réponses: 19
    Dernier message: 20/09/2005, 13h49
  2. [débat] Reflexion sur « quel langage ?»
    Par jack69 dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 23/05/2005, 08h30

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