Je suis nouveau pour les réflexions. J'ai besoin de créer une classe qui hérite d'une classe parente. Je dois créer une propriété readonly. Cette propriété appelle une fonction existante dans la classe parent en transmettant un argument 25.Réflexion IL Code
Tout fonctionne correctement, sauf que je ne peux pas transmettre la valeur 25 à la fonction appelée. Voici le code qui génère la classe. Veuillez aider. Merci.
Public Shared Function GetDynamicClass() As Type
Dim asmName As New AssemblyName
asmName.Name = "MyAssm"
Dim asmBuilder As AssemblyBuilder = Thread.GetDomain().DefineDynamicAssembly (asmName, AssemblyBuilderAccess.RunAndSave)
Dim mdlBuilder As ModuleBuilder = asmBuilder.DefineDynamicModule("MyDynModule")
Dim TypeBldr As TypeBuilder = mdlBuilder.DefineType("MyDynClass", TypeAttributes.[Public] Or TypeAttributes.[Class])
TypeBldr.SetParent(GetType(MyParent))
Dim PropertyName As String = ""
Dim PropBldr As PropertyBuilder = Nothing
Dim GetSetAttr As MethodAttributes = Nothing
Dim currGetPropMthdBldr As MethodBuilder = Nothing
Dim currGetIL As ILGenerator = Nothing
Dim mi As MethodInfo = Nothing
PropertyName = "SurveyDate"
PropBldr = TypeBldr.DefineProperty(PropertyName, PropertyAttributes.None, GetType(Object), New Type() {GetType(Object)})
GetSetAttr = MethodAttributes.[Public] Or MethodAttributes.HideBySig
currGetPropMthdBldr = TypeBldr.DefineMethod("get_value", GetSetAttr, GetType(Object), Type.EmptyTypes)
currGetIL = currGetPropMthdBldr.GetILGenerator()
mi = GetType(MyParent).GetMethod("GetProgress")
currGetIL.DeclareLocal(GetType(Object))
currGetIL.Emit(OpCodes.Ldarg_0)
currGetIL.Emit(OpCodes.Ldc_I4_0)
currGetIL.Emit(OpCodes.Conv_I8)
currGetIL.Emit(OpCodes.Call, mi)
currGetIL.Emit(OpCodes.Ret)
PropBldr.SetGetMethod(currGetPropMthdBldr)
Return TypeBldr.CreateType
End Function
Vous pouvez simplement écrire C# ce que vous voulez que du code ne compile ensuite et l'assemblage ouvert avec réflecteur et sélectionnez IL désassembleur. –