在下面的实施例I可通过字符串动态地创建一个对象;不过,我有没有办法让在基类的公共方法。我不能投obj转换为基地,因为我不知道什么通用将在设计时使用做。在运行时这样做的任何suggestings将是很好。

项目A包含一类【T,J>:BASE【T,J>结果 项目B包含B类【T,J>:BASE【T,J>

项目C包含类BASE【T,J>结果           公共虚拟控制【T,J>项目

项目视窗表 - cmdGo_Click事件

的字符串的dll = textbox1.text // EX “ProjectA.dll”,点击 字符串类= textbox2.text // EX “A`2 [enuT,enuJ]” 结果 对象OBJ = activator.createinstancefrom(DLL,类)

有帮助吗?

解决方案

运行的等式的一部分仿制药不要紧,因为编译器已经填补了空白,为通用实现。我相信你可以使用反射来获取在基类的方法,就像下面这个例子中,我希望这有助于。

MethodInfo[] baseMethods = obj.GetType().BaseType.GetMethods();
object retObj = baseMethods[0].Invoke(obj, new object[] {"paramVal1", 3, "paramVal3"});

其他提示

此代码创建BASE <整型,字符串>的一个实例:

Type type = typeof(BASE<,>).MakeGenericType(typeof(int), typeof(string));
object instance = Activator.CreateInstance(type);

如果您不知道在运行时使用的,那么你就不能使用依赖于这些类型要么任何操作的类型参数,所以...为什么不把非泛型基类BASE包含所有操作不依赖于通用参数,则可以区分obj到该基类型,并使用它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top