代码之家  ›  专栏  ›  技术社区  ›  Greg Bogumil

泛型类型为任意接口的泛型函数

  •  3
  • Greg Bogumil  · 技术社区  · 15 年前

    我想实现一个带有泛型约束的泛型函数,传入的类型是一个接口。这在C中是可能的吗?我让它在没有约束的情况下正常工作,但是如果代码不是接口,它在运行时会失败,所以我想进行编译时检查。

    public T MyFunction<T> where T : {any interface type} { return null; }
    
    3 回复  |  直到 15 年前
        1
  •  7
  •   Reed Copsey    15 年前

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

    // 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");
    
        // ...
    }
    
        2
  •  5
  •   Adam Robinson    15 年前

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

        3
  •  1
  •   Seattle Leonard    15 年前

    您必须使用特定的接口。您可以创建一个基础接口,所有其他接口都从该接口派生,并将其用作约束。