📌  相关文章
📜  C#2.0 delegate-covariance

📅  最后修改于: 2020-11-01 03:01:17             🧑  作者: Mango

C#delegate-covariance

C#delegate-covariance允许我们调用一个派生了委托签名返回类型的返回类型的方法。

这意味着我们可以调用返回父类或子类对象的方法。

在这里,我们创建两个示例。第一个示例调用一个返回父级或派生类对象的方法。

C#delegate-covariance示例1

using System;
namespace CSharpFeatures
{
    class A { }
    class B : A { }
    class DelegateCoveriance
    {
        delegate A Mydelegate();
        static void Main(string[] args)
        {
            // Calling MethodA
            Mydelegate del = MethodA;
            del();
            // Calling MethodB
            Mydelegate del2 = MethodB;
            del2();
        }
        static A MethodA()
        {
            Console.WriteLine("This is MethodA");
            return new A();
        }
        static B MethodB()
        {
            Console.WriteLine("This is MethodB");
            return new B();
        }
    }
}

输出:

This is MethodA
This is MethodB

C#delegate-covariance示例2

在此示例中,我们调用的方法不返回委托签名中指定的派生对象。让我们看看如果执行此操作会发生什么。

using System;
namespace CSharpFeatures
{
    class A { }
    class B : A { }
    class C { }
    class DelegateCoveriance
    {
        delegate A Mydelegate();
        static void Main(string[] args)
        {
            // Delegating MethodA
            Mydelegate del = MethodA;
            del();
            // Delegating MethodB
            Mydelegate del2 = MethodB;
            del2();
            Mydelegate del3 = MethodC;
            del3();
        }
        static A MethodA()
        {
            Console.WriteLine("This is MethodA");
            return new A();
        }
        static B MethodB()
        {
            Console.WriteLine("This is MethodB");
            return new B();
        }
        static C MethodC()
        {
            Console.WriteLine("This is MethodC");
        }
    }
}

输出:

DelegateCoveriance.cs(25,31): error CS0407: 
'CSharpFeatures.C CSharpFeatures.DelegateCoveriance.MethodC()' has the wrong return type