Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public delegate void TestDelegate();
- public static class ExampleOne
- {
- public static Action<string, bool> OnFunctionCall
- => (message, flag) => Console.WriteLine("Example");
- }
- public static class ExampleTwo
- {
- public static TType CreateDelegate<TType>(Action<string, bool> onFunctionCall)
- where TType : class
- {
- var method = new DynamicMethod($"{Guid.NewGuid()}", typeof(void), Type.EmptyTypes, typeof(TType), true);
- ILGenerator il = method.GetILGenerator();
- // loading the first string argument
- il.Emit(OpCodes.Ldstr, method.Name);
- // not sure here how to load boolean value to the stack
- il.Emit(OpCodes.Ldc_I4_0);
- // this line doesn't work
- // example two has no idea about ExampleOne
- // is it possible to load the reference of the Action<string, bool> to the stack and call it ?
- il.Emit(OpCodes.Call, onFunctionCall.Method);
- il.Emit(OpCodes.Ret);
- return method.CreateDelegate(typeof(TestDelegate)) as TType;
- }
- }
- public class Program
- {
- public static void Main(string[] args)
- => ExampleTwo
- .CreateDelegate<TestDelegate>(ExampleOne.OnFunctionCall)
- .Invoke();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement