예제 #1
0
 public static void ReflectionInvoke(MethodInfo m, InvokeMethod obj)
 {
     //var obj = new InvokeMethod();
     //var m = CreateMethodInfo(obj);
     m.Invoke(obj, new object[] { InvokeTimes });
 }
예제 #2
0
        //public static void EmitInfoke()
        //{

        //}
        #endregion

        #region PrepareEnvironment

        private static MethodInfo CreateMethodInfo(InvokeMethod obj)
        {
            var t = typeof(InvokeMethod);
            var m = t.GetMethod("Do");

            return m;
        }
예제 #3
0
 public void IlEmitInvoke()
 {
     var add = CreateIlMethod();
     //
     var obj = new InvokeMethod();
     add(obj, InvokeTimes);
 }
예제 #4
0
 private static JobAction CreateDelegateAction()
 {
     var obj = new InvokeMethod();
     var action = Delegate.CreateDelegate(typeof(JobAction), obj, CreateMethodInfo(obj)) as JobAction;
     return action;
 }
예제 #5
0
 public static void DelegateInvoke()
 {
     var obj = new InvokeMethod();
     var action = CreateDelegate(obj);
     action(InvokeTimes);
 }
예제 #6
0
 public static void LambdaInvoke()
 {
     var obj = new InvokeMethod();
     var action = CreateLambda();
     action.Invoke(obj, InvokeTimes);
 }
예제 #7
0
 public static void InterfaceInvoke()
 {
     IInvokeMethod obj = new InvokeMethod();
     obj.Do(InvokeTimes);
 }
예제 #8
0
 public void ReflectionInvokeTest2()
 {
     var obj = new InvokeMethod();
     MethodInfo m = null;
     CodeTimer.Time("ReflectionInvoke.Create", CreateTimes, () => m = CreateMethodInfo(obj));
     CodeTimer.Time("ReflectionInvoke", InvokeTimes, () => ReflectionInvoke(m, obj));
 }
예제 #9
0
        public void IlEmitInvokeTest2()
        {

            Action<InvokeMethod, int> a = null;
            CodeTimer.Time("IL Emit InvokeTest.Create", CreateTimes, () => a = CreateIlMethod());

            var obj = new InvokeMethod();
            CodeTimer.Time("IL Emit InvokeTest", InvokeTimes, () => a.Invoke(obj, InvokeTimes));
        }
예제 #10
0
 public static void DirectInvoke()
 {
     var obj = new InvokeMethod();
     obj.Do(InvokeTimes);
 }
예제 #11
0
 public void DynamicInvokeTest2()
 {
     CodeTimer.Time("DynamicInvokeTest.Create", CreateTimes, () => { dynamic a = new InvokeMethod(); });
     dynamic b = new InvokeMethod();
     CodeTimer.Time("DynamicInvokeTest", InvokeTimes, () => b.Do(InvokeTimes));
 }
예제 #12
0
 public void DelegateInvokeTest2()
 {
     var obj = new InvokeMethod();
     Action<int> a = null;
     CodeTimer.Time("DelegateInvokeTest.Create", CreateTimes, () => a = CreateDelegate(obj));
     CodeTimer.Time("DelegateInvokeTest", InvokeTimes, () => a.Invoke(InvokeTimes));
 }
예제 #13
0
        public void LambdaInvokeTest2()
        {
            var obj = new InvokeMethod();
            Action<InvokeMethod, int> a =
                CodeTimer.Time<int, Action<InvokeMethod, int>>("LambdaInvokeTest.Create",
                    CreateTimes, (int i) => CreateLambda(), InvokeTimes);

            CodeTimer.Time<Tuple<InvokeMethod, Action<InvokeMethod, int>, int>, object>("LambdaInvokeTest", InvokeTimes, (tuple) =>
            {
                tuple.Item2(tuple.Item1, tuple.Item3);
                return null;
            }, new Tuple<InvokeMethod, Action<InvokeMethod, int>, int>(obj, a, InvokeTimes));// Tuple<InvokeMethod, Action<InvokeMethod, int>>());
        }
예제 #14
0
 private static Action<int> CreateDelegate(InvokeMethod obj)
 {
     var action = new Action<int>(obj.Do);
     return action;
 }
예제 #15
0
 public static void DynamicInvoke()
 {
     dynamic obj = new InvokeMethod();
     obj.Do(InvokeTimes);
 }
예제 #16
0
        public void DynamicCallTest()
        {
            dynamic d = new InvokeMethod();
            Assert.IsNotNull(d.Str);


            dynamic d2 = Activator.CreateInstance("CSharpFeatures", "CSharpFeatures.Dynamic.InvokeMethod2");
            Assert.AreEqual("InvokeMethod2", d2.Str);

            dynamic d3 = InvokeMethod.GetInstance();
            Assert.AreEqual("InvokeMethod2", d3.Str);
        }
예제 #17
0
 public void DirectInvokeTest2()
 {
     var obj = new InvokeMethod();
     CodeTimer.Time("DirectInvokeTest.Create", CreateTimes, () => new InvokeMethod());
     CodeTimer.Time("DirectInvokeTest", InvokeTimes, () => obj.Do(InvokeTimes));
 }