![]() |
1
125
正如你所发现的,你不能这样做。
作为解决方法,我通常提供一个委托,该委托可以创建类型为的对象
|
![]() |
2
40
没有这样的结构。只能指定空的构造函数约束。 我用lambda方法解决这个问题。
用例
|
![]() |
3
38
使用反射创建泛型对象时,类型仍然需要声明正确的构造函数,否则将引发异常。只要参数与其中一个构造函数匹配,就可以传入任何参数。 通过这种方式,您不能在模板中对构造函数施加约束。 如果缺少构造函数,则需要在运行时处理异常,而不是在编译时获取错误。
|
![]() |
4
16
这是一个我个人认为非常有效的解决方法。如果您考虑什么是通用的参数化构造函数约束,那么它实际上是具有特定签名的类型和构造函数之间的映射。您可以使用字典创建自己的此类映射。将它们放入静态的“工厂”类中,您可以创建不同类型的对象,而不必每次都担心构建构造函数lambda:
然后在通用方法中,例如:
|
![]() |
5
6
不可以。目前唯一可以指定的构造函数约束是非参数构造函数。 |
![]() |
6
3
我认为这是一个最干净的解决方案,它限制了对象的构造方式。它并不是完全经过编译时检查的。当您同意让类的实际构造函数具有与IConstructor接口相同的签名时,这有点像对构造函数有一个约束。这个
|