如何使用反射动态创建通用C对象?在C#中,我有以下对象:public class Item{ }public class Task<T>{ }public class TaskA<T> : Task<T>{ }public class TaskB<T> : Task<T>{ }我希望使用C#反射动态地创建TASCA或TaskB(Activator.CreateInstance)。但是,我不知道手之前的类型,所以我需要基于字符串(如“Nampace.askA”或“Nampacet.askAB”)动态创建TASKA。
3 回答
慕森王
TA贡献1777条经验 获得超3个赞
public interface ITask {
void Process(object o);}public class Task<T> : ITask{
void ITask.Process(object o)
{
if(o is T) // Just to be sure, and maybe throw an exception
Process(o as T);
}
public void Process(T o) { }}Type d1 = Type.GetType("TaskA"); //or "TaskB"Type[] typeArgs = { typeof(Item) };
Type makeme = d1.MakeGenericType(typeArgs);ITask task = Activator.CreateInstance(makeme) as ITask;
// This can be Item, or any type derived from Itemtask.Process(new Item());
宝慕林4294392
TA贡献2021条经验 获得超8个赞
public Task <T> factory (String name){
Task <T> result;
if (name.CompareTo ("A") == 0)
{
result = new TaskA ();
}
else if (name.CompareTo ("B") == 0)
{
result = new TaskB ();
}
return result;}- 3 回答
- 0 关注
- 320 浏览
添加回答
举报
0/150
提交
取消
