通用类型作为委托参数

时间:2018-06-18 11:58:12

标签: c#

假设我有以下代表:

public delegate void ExampleDelegate(IMessage msg);

我可以在我使delegate为通用类型的类中使用上述IMessage吗?如下:

public class ExampleClass<TGenericType> where TGenericType: IMessage
{
    public void UsageDelegate(TGenericType message)
    {

    }
}

我试了但是我得到了:

  

禁用超载&#39; UsageDelegate&#39;匹配委托&#39; ExampleDelegate&#39;

在我看来,应该有办法实现这一目标,但却无法找到方法。有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

UsageDelegate没有ExampleDelegate简单明了。 ExampleDelegate必须能够任何 IMessageUsageDelegate只接受IMessage的一个特定实施。

实现这一目标的唯一方法是重新考虑您想要做的事情并相应地构建解决方案。

答案 1 :(得分:1)

使用

public void UsageDelegate(IMessage message)
{

}

通过这种方式,您可以调用UsageDelegate将任何实现IMessage的泛型类型传递给它。

接口的范围小于泛型类型。 如果使用泛型类型作为参数,则具有比委托实现更大的对象范围。如果您尝试在方法中访问它,则会导致对Generic Type属性的无效访问。

您可以投射IMessage&gt;通用类型。

但是如果你使用像你发布的那样,它就像试图施放

一样

GenericT_A到GenericT_B只是因为它们都实现了相同的接口,并且它们不一定有效。