我的情況是下一個:我正在使用Visual C#2010 express開發Windows窗體應用程序。用戶登錄時,通過從數據庫表中加載的選項,建立一個菜單欄。在該表中,我保存了ID,選項名稱和表單名稱。C#反射:使用字符串類名稱實例化一個對象
因此,假設在我的項目,我有一個名爲Contabilidad形式,它具有Contabilidad.cs是主類,所以如果我想創建一個新的形式表現出來我這樣做:
Contabilidad frmConta = new Contabilidad();
frmConta.Show();
但在這種情況下,因爲菜單選項存儲在數據庫中,所以在數據庫中我只有字符串「Contabilidad」。所以,我想用C#反射來創建一個Contabilidad的實例或任何其他形式的字符串格式的類名。
首先我想這:
Form frmConta= (Form)Activator.CreateInstance(null, "Contabilidad").Unwrap();
因爲我在StackOverflow上的問題,如果我使用空我指的是當前組件(我的形式都在同一個項目)閱讀,但是我得到這個消息:
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爲空。
我做錯了什麼?提前致謝。