泛型函数,泛型类型是任何接口

时间:2010-06-18 17:24:41

标签: c# generics interface

我想用通用约束实现泛型函数,传入的Type是接口。这可能在C#中吗?我没有约束就可以正常工作,但如果代码不是接口,代码将在运行时失败,所以我想让编译时检查。

public T MyFunction<T> where T : {any interface type} { return null; }

3 个答案:

答案 0 :(得分:7)

您可以将类型约束到特定接口,但不能“任意”任意接口。

// This is allowable
public T MyFunction<T>() where T : IMyInterface { return null; }

这将允许您传递实现该特定接口的任何对象。


编辑:

鉴于你的目标,从评论中我个人可能只是进行了一些运行时检查:

public IEnumerable<T> LoadInterfaceImplementations<T>()
{
    Type type = typeof(T);
    if (!type.IsInterface)
        throw new ArgumentException("The type must be an Interface");

    // ...
}

答案 1 :(得分:5)

不,没有办法只将类型约束到接口。

答案 2 :(得分:1)

您必须使用特定的界面。您可以创建一个所有其他接口派生自的基本接口,并将其用作约束。