Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Reflection;
- using System.Reflection.Emit;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication24
- {
- class Program
- {
- static void Main(string[] args)
- {
- DynamicMethod dynamicMethod = new DynamicMethod("", null, new Type[] { typeof(Class1), typeof(Class2) }, typeof(Program), true);
- ILGenerator ilGen = dynamicMethod.GetILGenerator();
- //
- // arg1.X = arg2;
- //
- ilGen.Emit(OpCodes.Ldarg_0);
- ilGen.Emit(OpCodes.Ldarg_1);
- ilGen.Emit(OpCodes.Stfld, typeof(Class1).GetField("X", BindingFlags.Instance | BindingFlags.Public));
- //
- // Console.WriteLine(arg1.X);
- //
- ilGen.Emit(OpCodes.Ldarg_0);
- ilGen.Emit(OpCodes.Ldfld, typeof(Class1).GetField("X", BindingFlags.Instance | BindingFlags.Public));
- ilGen.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", BindingFlags.Static | BindingFlags.Public, null, new Type[] { typeof(object) }, null));
- ilGen.Emit(OpCodes.Ret);
- //
- // Result: ConsoleApplication24.Class2
- ((Action<Class1, Class2>)dynamicMethod.CreateDelegate(typeof(Action<Class1, Class2>))).Invoke(new Class1(), new Class2());
- }
- }
- class Class1
- {
- public Class1 X;
- }
- class Class2
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement