gpt4 book ai didi

c# - 委托(delegate)参数中的 Co(ntra) 方差

转载 作者:太空宇宙 更新时间:2023-11-03 22:07:13 25 4
gpt4 key购买 nike

我想创建一个指向静态函数的委托(delegate)...静态函数有第二个 Flight 类型的参数,Flight 类实现 ITravelObject 接口(interface),第二个委托(delegate)参数需要这个接口(interface)。

以下代码无效。这是为什么?还有其他可能的实现方式吗?

namespace CovarianceContravarianceTest
{

public class Data {}

public interface ITravelObject
{
int ID { get; set; }
}

public abstract class BaseObject {}

public class Flight : BaseObject, ITravelObject
{
int ITravelObject.ID {get;set;}
}

public static class LetService
{
public static void DoSomething(Data da, Flight let) {}
}

public delegate void TravelServiceMethodDelegate(Data dataAccess,ITravelObject travelObject);

class Program
{
static void Main(string[] args)
{
TravelServiceMethodDelegate test = new TravelServiceMethodDelegate(LetService.DoSomething);
}
}

这会导致错误

“DoSomething”没有重载匹配委托(delegate)“CovarianceContravarianceTest.TravelServiceMethodDelegate”

谢谢大家的回答,我已经想通了这甚至不是一个协变/逆变问题

最佳答案

您正在尝试插入此方法

public static void DoSomething(Data da, Flight let) {} 

进入这个委托(delegate)

var test = new TravelServiceMethodDelegate(LetService.DoSomething);

这行不通。为什么?考虑以下代码:

class CarRide : ITravelObject { }

void GoForACarRide(TravelServiceMethodDelegate travelService) {
travelService.Invoke(someData, new CarRide());
}

这会编译,因为 CarRide 实现了 ITravelObject

但是,如果我调用 GoForACarRide(test),它将中断,因为 test 指向 DoSomething,它需要一个 航类

关于c# - 委托(delegate)参数中的 Co(ntra) 方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com