none
紧急求援:silverlight 反射-动态类(动态生成的类)调用外部类中的某个非静态方法(调用static方法我晓得)? RRS feed

  • 问题

  • 紧急求援:silverlight 反射-动态类(动态生成的类)调用外部类中的某个非静态方法(调用static方法我晓得)?请举一个简单的例子。
    • 已编辑 TFSoft 2009年8月28日 13:35
    2009年8月28日 13:34

答案

  • 你好,

    请参考:

     

    AppDomain myDomain = AppDomain.CurrentDomain;

     

    AssemblyName myAsmName = new AssemblyName("MyAssembly");

     

    AssemblyBuilder myAssembly = myDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.Run);

     

    ModuleBuilder myModule = myAssembly.DefineDynamicModule(myAsmName.Name);

     

    TypeBuilder myType = myModule.DefineType("MyType", TypeAttributes.Public);

     

    MethodBuilder exSetMethod = myType.DefineMethod("MyMethod", MethodAttributes.Public, typeof(int), Type.EmptyTypes);

     

    ILGenerator Ilgen = exSetMethod.GetILGenerator();

     

    // .locals init (

     

    // [0] int32 CS$1$0000)

     

    //L_0000: nop

     

    //L_0001: ldc.i4.1

     

    //L_0002: stloc.0

     

    //L_0003: br.s L_0005

     

    //L_0005: ldloc.0

     

    //L_0006: ret

    Ilgen.DeclareLocal(

    typeof(int));

    Ilgen.Emit(

    OpCodes.Nop);

    Ilgen.Emit(

    OpCodes.Ldc_I4_1);

    Ilgen.Emit(

    OpCodes.Stloc_0);

     

    var lb = Ilgen.DefineLabel();

    Ilgen.Emit(

    OpCodes.Br_S, lb);

    Ilgen.MarkLabel(lb);

    Ilgen.Emit(

    OpCodes.Ldloc_0);

    Ilgen.Emit(

    OpCodes.Ret);

     

     

    Type finished = myType.CreateType();

     

    var o = myAssembly.CreateInstance(finished.FullName);

     

    var i = finished.GetMethod("MyMethod").Invoke(o, null);


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. Need a sample of a technique of Microsoft? Just check out CodeFx first! http://cfx.codeplex.com/
    2009年9月1日 10:19
    版主