3 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
如您所知,您無(wú)法執(zhí)行此操作。
作為一種解決方法,我通常提供一個(gè)可以創(chuàng)建以下類型的對(duì)象的委托T:
public class A {
public static void Method<T> (T a, Func<float[,], T> creator) {
//...do something...
}
}

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
這是我個(gè)人認(rèn)為相當(dāng)有效的解決方法。如果您想到什么是通用的參數(shù)化構(gòu)造函數(shù)約束,它實(shí)際上是類型和具有特定簽名的構(gòu)造函數(shù)之間的映射。您可以使用字典來(lái)創(chuàng)建自己的映射。將它們放在靜態(tài)的“ factory”類中,您可以創(chuàng)建各種類型的對(duì)象,而不必?fù)?dān)心每次都要構(gòu)造構(gòu)造函數(shù)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 關(guān)注
- 955 瀏覽
添加回答
舉報(bào)