예제 #1
0
    public void TestCallsVirtualMethod()
    {
        RefUtilClass1                one   = new RefUtilClass1("one");
        RefUtilClass1Extends         two   = new RefUtilClass1Extends("two");
        MethodInfo                   info1 = typeof(RefUtilClass1Extends).GetMethod("CallVirtMethod");
        Func <RefUtilClass1, string> d1    = (Func <RefUtilClass1, string>)ReflectionUtil.GetDelegate(info1);

        Assert.AreEqual("base", d1(one));
        Assert.AreEqual("extends", d1(two));
    }
예제 #2
0
    public void TestOpenDelegate()
    {
        RefUtilClass1 one  = new RefUtilClass1("one");
        RefUtilClass1 two  = new RefUtilClass1("two");
        MethodInfo    info = typeof(RefUtilClass1).GetMethod("GetValue");
        Func <RefUtilClass1, string> openDelegate = ReflectionUtil.CreateOpenDelegate <Func <RefUtilClass1, string> >(info);

        Assert.AreEqual("one", openDelegate(one));
        Assert.AreEqual("two", openDelegate(two));
    }
예제 #3
0
    public void TestOpenDelegateChild()
    {
        RefUtilClass1 one               = new RefUtilClass1("one");
        RefUtilClass1 two               = new RefUtilClass1Extends("two");
        MethodInfo    info1             = typeof(RefUtilClass1).GetMethod("GetValue");
        MethodInfo    info2             = typeof(RefUtilClass1Extends).GetMethod("GetValue");
        Func <RefUtilClass1, string> d1 = (Func <RefUtilClass1, string>)ReflectionUtil.GetDelegate(info1);
        Func <RefUtilClass1, string> d2 = (Func <RefUtilClass1, string>)ReflectionUtil.GetDelegate(info2);

        Assert.AreEqual(d1, d2);

        Assert.AreEqual("one", d1(one));
        Assert.AreEqual("two", d1(two));
    }
예제 #4
0
    public void TestOpenDelegateAncestor()
    {
        RefUtilClass1             one   = new RefUtilClass1("one");
        RefUtilClass1Extends      two   = new RefUtilClass1Extends("two");
        RefUtilClass1ExtendsAgain three = new RefUtilClass1ExtendsAgain("three");

        MethodInfo info1 = typeof(RefUtilClass1).GetMethod("GetValue");
        MethodInfo info2 = typeof(RefUtilClass1Extends).GetMethod("GetValue");
        MethodInfo info3 = typeof(RefUtilClass1ExtendsAgain).GetMethod("GetValue");

        Func <RefUtilClass1, string> d1 = (Func <RefUtilClass1, string>)ReflectionUtil.GetDelegate(info1);
        Func <RefUtilClass1, string> d2 = (Func <RefUtilClass1, string>)ReflectionUtil.GetDelegate(info2);
        Func <RefUtilClass1, string> d3 = (Func <RefUtilClass1, string>)ReflectionUtil.GetDelegate(info3);

        Assert.AreEqual(d1, d2);
        Assert.AreEqual(d2, d3);

        Assert.AreEqual("one", d1(one));
        Assert.AreEqual("two", d1(two));
        Assert.AreEqual("three", d1(three));
    }