0

给定以下代码,是否可以拥有一组通用类型的项目:

public abstract class AGeneric<T> {
internal virtual List<T>  MyList { get; set; } 
}


public class LibA<T> : AGeneric<T> {
internal override List<T>  MyList { get; set; } 
}

public class LibB<T> : AGeneric<T> {
internal override List<T>  MyList { get; set; } 
}

public class LibC<T> : AGeneric<T> {
internal override List<T>  MyList { get; set; } 
}
//.
//.
//.
Main {
    List<AGeneric>  test  = new List<AGeneric>(); //error - requires type; 
    List<BGeneric>  test2 = new List<BGeneric>();
    test2.first().


}

public abstract class BGeneric {
internal virtual List<T>  MyList { get; set; } //cant use T to provide implementation       
}


public class LibD<T> : BGeneric {
internal override List<T>  MyList { get; set; } 
}

public class LibE<T> : BGeneric {
internal override List<T>  MyList { get; set; } 
}

public class LibF<T> :BGeneric {
internal override List<T>  MyList { get; set; } 
}

目标是从抽象类中实现各种类型的 List,因为这些类的目的是确定并返回强类型对象数组。

4

1 回答 1

0

不,但是您可以列出具有运行时类型的非泛型。这个例子基本上就是你所追求的,但是它会产生一个运行时错误(仅例子 1),因为 AGeneric 需要一个通用参数。如果你可以重组你必须不是通用的东西,那么你可以调整这项工作:

Type listType = typeof(List<>).MakeGenericType(typeof(AGeneric<>));
var answer = Activator.CreateInstance(listType);

以同样的方式,如果您必须拥有 AGeneric,您可以使用它的运行时类型创建列表

int myRunTimeVariable = 0;
Type MyType = myRunTimeVariable.GetType();

Type listType = typeof(List<>).MakeGenericType(typeof(AGeneric<>).MakeGenericType(MyType));
var answer = Activator.CreateInstance(listType);

answerList<AGeneric<int>>在这种情况下将是类型。但它仍然不是一个List<AGeneric<>>

于 2013-03-15T21:17:19.880 回答