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

get*_*eth 4 .net c# generics generic-constraints

我知道你可以写:

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

}
Run Code Online (Sandbox Code Playgroud)

强制执行T具有空构造函数.

我的Qs是:

  1. 你能强制执行T具有特定类型参数的构造函数吗?喜欢:

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

    class GenericClass<T> where T : void F()
    { 
       void G ()
       {
           T.F();
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    我知道你可以指定T实现一个接口,但我不希望这样.我想指定它T有一个静态函数.

Jon*_*eet 6

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

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

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

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

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

  • 每当我想到过去为了解决这个局限而必须组装的克隆时,我都会感到不寒而栗......(我对仿制品做了大量的处理).我如何渴望一个静态接口,解决问题的好方法. (2认同)