Bonsoir,

J'ai un petit problème avec le mot clé dynamique

Je créer une classe dynamiquement, comme ceci
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
var asm = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("DynAsm"), AssemblyBuilderAccess.Run);
 
            var mod = asm.DefineDynamicModule("DynMod");
 
            var type = mod.DefineType("DynType");
 
            var ttt = type.DefineField("DynField", typeof(string), FieldAttributes.Public);
 
            var ctor = type.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes);
 
            var il = ctor.GetILGenerator();
 
            il.Emit(OpCodes.Ret);
 
            var t = type.CreateType();
 
            dynamic k = Activator.CreateInstance(t);
On a donc un objet k de type "DynType" et qui dispose d'un champ "DynField".

Malheureusement, l'accès au champ entraîne une RuntimeBinderException.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
var result = k.DynField;
Et l'erreur :

'object' ne contient pas de définition pour 'DynField'

Le mot clé 'dynamic' est t'il donc inutilisable sur les types crées dynamiquement ?