C# 在运行时使用泛型创建对象
在下面的示例中,我可以通过字符串动态创建一个对象; 但是,我无法获取 BASE 类的公共方法。 我无法将 obj 转换为 BASE,因为我不知道在设计时将使用什么泛型。 任何关于在运行时这样做的建议都会很好。
项目A包含类A{T,J> : BASE{T,J>
项目 B 包含 B{T,J> 类 : BASE{T,J>
项目 C 包含类 BASE{T,J>
公共虚拟控制{T,J> item
项目 Windows 窗体
cmdGo_Click 事件
字符串 dll = textbox1.text //ex "ProjectA.dll"
string class = textbox2.text //ex "A`2[enuT,enuJ]"
对象 obj = activator.createinstancefrom(dll,类)
In the following example i can create an object dynamically via a string; however, i have no way to get at the public methods of BASE class. i can't cast obj to a BASE because i don't know what generic will be used at design time. any suggestings on doing so at runtime would be nice.
Project A contains Class A{T,J> : BASE{T,J>
Project B contains Class B{T,J> : BASE{T,J>
Project C contains Class BASE{T,J>
public virtual control{T,J> item
Project Windows Form
cmdGo_Click event
string dll = textbox1.text //ex "ProjectA.dll"
string class = textbox2.text //ex "A`2[enuT,enuJ]"
object obj = activator.createinstancefrom(dll,class)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
此代码创建 BASE的实例 :
This code creates an instance of BASE<int, string> :
如果您不知道运行时使用的类型参数,那么您也无法使用依赖于这些类型的任何操作,所以...为什么不为 BASE 创建一个非泛型基类包含所有不依赖于泛型参数的操作,那么您可以将 obj 命名为该基本类型并使用它。
If you do not know the type parameters used at run-time, then you cannot use any operations that depend on these types either, so... why not make a non-generic base class to
BASE
that contains all the operations that do not depend on the generic parameters, then you can caseobj
to that base type and use it.在运行时等式的泛型部分并不重要,因为编译器已经填补了泛型实现的空白。 我相信您可以使用反射来获取基类方法,就像下面的示例一样,我希望这会有所帮助。
At runtime the generics part of the equation does not matter, because the compiler has already filled in the gaps for the generic implementation. I believe you can use reflection to get at the base class methods, like in this example below, I hope this helps.