📅  最后修改于: 2020-11-01 03:01:17             🧑  作者: Mango
C#delegate-covariance允许我们调用一个派生了委托签名返回类型的返回类型的方法。
这意味着我们可以调用返回父类或子类对象的方法。
在这里,我们创建两个示例。第一个示例调用一个返回父级或派生类对象的方法。
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
在此示例中,我们调用的方法不返回委托签名中指定的派生对象。让我们看看如果执行此操作会发生什么。
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