我已经看过这个主题:从类名创建一个实例
并编写此代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
object obj = Activator.CreateInstance(null, "MyClass");
MyClass t = (MyClass)obj;
t.My1 = 100;
MessageBox.Show(t.My1.ToString());
}
}
public class MyClass
{
public int My1 { get; set; }
public int My2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是当它运行时有一个例外:
Could not load type 'MyClass' from assembly 'Test_Reflection, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Run Code Online (Sandbox Code Playgroud)
我有另一个问题.我在一个集合中有一个类,它有一些属性.在另一个程序集中,我想创建它的实例并通过使用stringy Class Name键入其中一个属性来访问它的属性.我怎样才能做到这一点?
Kyr*_*o M 12
根据MSDN null实际上并不意味着当前的组装.这意味着将搜索程序集(当您的类位于另一个程序集中时就是这个问题).此外,您不仅需要指定类名.因此,为了防止搜索并正确获取类型,您需要编写完整的程序集限定名称:
Type objType = Type.GetType("YourNamespace.MyClass, YourAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
object obj = Activator.CreateInstance(objType);
MyClass t = (MyClass)obj;
Run Code Online (Sandbox Code Playgroud)
您可以检索的程序集限定名称,例如下一个代码(检查您是否有误):
string name = typeof(MyClass).AssemblyQualifiedName;
Run Code Online (Sandbox Code Playgroud)