C#Reflection:使用字符串类名称实例化一个对象

C#Reflection:使用字符串类名称实例化一个对象,第1张

概述我的情况是下一个:我正在使用Visual C#2010 express开发 Windows窗体应用程序.当用户登录时,dinamically构建一个从数据库表加载选项的menustrip.在该表中,我保存id,选项名称和表单名称. 所以,假设在我的项目中,我有一个名为Contabilidad的表单,它有Contabilidad.cs是主类,所以如果我想创建一个新的表单,并显示它,我这样做: Con 我的情况是下一个:我正在使用Visual C#2010 express开发 Windows窗体应用程序.当用户登录时,dinamically构建一个从数据库表加载选项的menustrip.在该表中,我保存ID,选项名称和表单名称.

所以,假设在我的项目中,我有一个名为ContabilIDad的表单,它有ContabilIDad.cs是主类,所以如果我想创建一个新的表单,并显示它,我这样做:

ContabilIDad frmConta = new ContabilIDad();frmConta.Show();

但是在这种情况下,由于菜单选项存储在数据库中,所以在数据库中只有字符串“ContabilIDad”.所以,我想使用C#反射创建一个ContabilIDad的实例或任何其他只有字符串格式的类名称的形式.

首先我试过这个:

Form frmConta= (Form)Activator.CreateInstance(null,"ContabilIDad").Unwrap();

因为我读了一个StackOverflow问题,如果我使用null我指的是当前的程序集(我的表单都在同一个项目),但我得到这个消息:

Could not load type 'ContabilIDad' from assembly 'AccountingSA,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'.

类的定义是下一个:

namespace AccountingSA {public partial class ContabilIDad : Form{    public ContabilIDad()    {        InitializeComponent();    } ...

我也试过这个:

Assembly assembly = Assembly.Load("AccountingSA");Type t = assembly.GetType("ContabilIDad");Form frmConta = (Form)Activator.CreateInstance(t);

但我得到ArgumentNullException与此消息:

Value cannot be null. Parameter name: type

因为t变量为空.

我做错了什么?提前致谢.

解决方法 使用类型的完全限定名称:
Type t = assembly.GetType("AccountingSA.ContabilIDad");

Assembly.GetType(string)的文档:

name Type: System.String The full name of the type. […] The name parameter includes the namespace but not the assembly.

总结

以上是内存溢出为你收集整理的C#Reflection:使用字符串类名称实例化一个对象全部内容,希望文章能够帮你解决C#Reflection:使用字符串类名称实例化一个对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存