如何使用反射动态创建通用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 回答
慕容708150
TA贡献1831条经验 获得超4个赞
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());
aluckdog
TA贡献1847条经验 获得超7个赞
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 关注
- 536 浏览
添加回答
举报
0/150
提交
取消