通用约束:强制类型具有静态函数和带参数的构造函数

时间:2011-05-07 07:46:48

标签: c# .net generics generic-constraints

我知道你可以写:

class GenericClass<T> where T : new()
{ 

}

强制T有一个空构造函数。

我的Qs是:

  1. 你能强制T有一个具有特定参数类型的构造函数吗?像:

    class SingletonFactoryWithEmptyConstructor<T> where T : new(int)
    
  2. 你可以强制T有一个静态函数(比方说,void F()),这样你就可以在泛型类中使用这个函数了吗?喜欢:

    class GenericClass<T> where T : void F()
    { 
       void G ()
       {
           T.F();
       }
    }
    

    我知道您可以指定T实现接口,但我不希望这样。我想指定T具有静态函数。

1 个答案:

答案 0 :(得分:6)

不,C#中没有这样的东西。

我之前曾建议"static interfaces"可以合理地表达这一点。他们对泛型类型约束有用(我怀疑,无论如何)但是你可以表达:

  • 具有任意参数的构造函数
  • 静态方法和属性

在我看来,这些要点中的最后一点特别有趣,允许使用通用的“平均”方法,而不是具有合适的加法和除法运算符的数字类型。

我相信MS的一些人已经考虑过类似的事情,但我没有听到任何暗示他们正在积极研究它的事情。

相关问题