5

我知道你可以写:

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

}

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

我的问题是:

  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具有静态功能。

4

1 回答 1

6

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

我之前曾建议“静态接口”可以合理简洁地表达这一点。它们对泛型类型约束有用(我怀疑,无论如何),但你可以表达:

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

在我看来,最后一点特别有趣,它允许使用适当的加法和除法运算符对数字类型使用通用的“平均”方法。

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

于 2011-05-07T07:54:39.347 回答