gpt4 book ai didi

c# - 在接口(interface)中使用泛型时无法转换/匹配类型,为什么?

转载 作者:太空狗 更新时间:2023-10-29 23:23:03 25 4
gpt4 key购买 nike

<分区>

在IMyMessage.cs中

public interface IMyMessage
{
}

在IMyMessageReceiver.cs中

public interface IMyMessageReceiver<T> where T: IMyMessage
{
void HandleMessage(T message);
void Subscribe();
}

在 MyMessagePublisher.cs 中

public static class MyMessagePublisher
{
private static Dictionary<Type, List<IMyMessageReceiver<IMyMessage>>> _subscribers;

static MyMessagePublisher
{
_subscribers = new Dictionary<Type, List<IMyMessageReceiver<IMyMessage>>>();
}

public static function Subscribe<T>(IMyMessageReceiver<T> receiver) where T: IMyMessage
{
Type messageType = typeof (T);
List<IMyMessageReceiver<IMyMessage>> listeners;

if(!_subscribers.TryGetValue(messageType, out listeners))
{
// no list found, so create it
List<IMyMessageReceiver<T>> newListeners = new List<IMyMessageReceiver<T>>();
// ERROR HERE: Can't convert List<IMyMessageReceiver<T>> to List<IMyMessageReceiver<IMyMessage>>
_subscribers.add(messageType, newListeners);

}

// I would then find the right list and add the receiver it to it but haven't got this far
}
}

所以我希望使用一堆“IMyMessages”和“IMyMessageReceivers”来传递消息。我之前采用了硬编码方法,但厌倦了 100 个不同的发布/订阅函数名称,所以我想我可以用泛型很好地包装它。

我的问题是在使用泛型时我无法让代码工作。即使我指定类型 T 将是 IMyMessage,我也不能在任何需要 IMyMessage 的地方使用 T。也许我只是习惯了基类/扩展类,因为它在那里可以正常工作。我尝试了从转换到真正通用的各种方法,但我总是遇到同样的问题。

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