3 回答
TA贡献1801条经验 获得超8个赞
如您所知,您无法执行此操作。
作为一种解决方法,我通常提供一个可以创建以下类型的对象的委托T:
public class A {
public static void Method<T> (T a, Func<float[,], T> creator) {
//...do something...
}
}
TA贡献1828条经验 获得超4个赞
这是我个人认为相当有效的解决方法。如果您想到什么是通用的参数化构造函数约束,它实际上是类型和具有特定签名的构造函数之间的映射。您可以使用字典来创建自己的映射。将它们放在静态的“ factory”类中,您可以创建各种类型的对象,而不必担心每次都要构造构造函数lambda的情况:
public static class BaseTypeFactory
{
private delegate BaseType BaseTypeConstructor(int pParam1, int pParam2);
private static readonly Dictionary<Type, BaseTypeConstructor>
mTypeConstructors = new Dictionary<Type, BaseTypeConstructor>
{
{ typeof(Object1), (pParam1, pParam2) => new Object1(pParam1, pParam2) },
{ typeof(Object2), (pParam1, pParam2) => new Object2(pParam1, pParam2) },
{ typeof(Object3), (pParam1, pParam2) => new Object3(pParam1, pParam2) }
};
然后在您的通用方法中,例如:
public static T BuildBaseType<T>(...)
where T : BaseType
{
...
T myObject = (T)mTypeConstructors[typeof(T)](value1, value2);
...
return myObject;
}
- 3 回答
- 0 关注
- 929 浏览
添加回答
举报