Esempio n. 1
0
        public static void DynamicInvoke()
        {
            A a1 = new A();
            A a2 = new A();
            B b1 = new B();
            B b2 = new B();

            DynamicInvokeDelegate testDelegate = DynamicInvokeTestFunction;

            // Check that the delegate behaves as expected
            A refParam    = b2;
            B outParam    = null;
            A returnValue = testDelegate(a1, b1, ref refParam, out outParam);

            Assert.Same(returnValue, a1);
            Assert.Same(refParam, b1);
            Assert.Same(outParam, b2);

            // Check dynamic invoke behavior
            object[] parameters = new object[] { a1, b1, b2, null };

            object retVal = testDelegate.DynamicInvoke(parameters);

            Assert.Same(retVal, a1);
            Assert.Same(parameters[2], b1);
            Assert.Same(parameters[3], b2);

            // Check invoke on a delegate that takes no parameters.
            Action emptyDelegate = EmptyFunc;

            emptyDelegate.DynamicInvoke(new object[] { });
            emptyDelegate.DynamicInvoke(null);
        }
Esempio n. 2
0
    public static void TestDynamicInvoke()
    {
        A a1 = new A();
        A a2 = new A();
        B b1 = new B();
        B b2 = new B();

        DynamicInvokeDelegate testDelegate = DynamicInvokeTestFunction;

        // Check that the delegate behaves as expected
        A refParam    = b2;
        B outParam    = null;
        A returnValue = testDelegate(a1, b1, ref refParam, out outParam);

        Assert.True(RuntimeHelpers.ReferenceEquals(returnValue, a1));
        Assert.True(RuntimeHelpers.ReferenceEquals(refParam, b1));
        Assert.True(RuntimeHelpers.ReferenceEquals(outParam, b2));

        // Check dynamic invoke behavior
        object[] parameters = new object[4];
        parameters[0] = a1;
        parameters[1] = b1;
        parameters[2] = b2;
        parameters[3] = null;

        object retVal = testDelegate.DynamicInvoke(parameters);

        Assert.True(RuntimeHelpers.ReferenceEquals(retVal, a1));
        Assert.True(RuntimeHelpers.ReferenceEquals(parameters[2], b1));
        Assert.True(RuntimeHelpers.ReferenceEquals(parameters[3], b2));

        // Check invoke on a delegate that takes no parameters.
        Action emptyDelegate = EmptyFunc;

        emptyDelegate.DynamicInvoke(new object[] { });
        emptyDelegate.DynamicInvoke(null);
    }
Esempio n. 3
0
 /// <summary>
 /// 定义一个动态调用的委托。
 /// </summary>
 /// <param name="delegate"></param>
 /// <returns></returns>
 public static DynamicDelegate Define(DynamicInvokeDelegate @delegate)
 {
     return(new DynamicDelegate {
         _delegate = @delegate
     });
 }