泛型约束:强制类型具有静态函数和带参数的构造函数
本文关键字:静态函数 参数 构造函数 约束 类型 泛型 | 更新日期: 2023-09-27 17:55:33
我知道你可以写:
class GenericClass<T> where T : new()
{
}
强制T
有一个空构造函数。
我的问题是:
您能否强制
T
具有具有特定类型参数的构造函数?喜欢:class SingletonFactoryWithEmptyConstructor<T> where T : new(int)
你能强制
T
有一个静态函数(比如说,void F()
),以便你可以在泛型类中使用此函数吗?喜欢:class GenericClass<T> where T : void F() { void G () { T.F(); } }
我知道您可以指定
T
实现接口,但我不希望这样。我想指定T
有一个静态函数。
不,C# 中没有这样的东西。
我之前曾建议"静态接口"可以合理地表达这一点。它们只对泛型类型约束有用(我怀疑,无论如何),但你可以表达:
- 具有任意参数的构造函数
- 静态方法和属性
- 运营商
在我看来,最后一点特别有趣,它允许使用通用的"平均"方法而不是具有合适的加法和除法运算符的数字类型。
我相信MS的一些人已经考虑过类似的事情,但我没有听到任何迹象表明他们正在积极努力。