如何获取给出类名的类的实例?

Ari*_*ian 4 c# reflection

我已经看过这个主题:从类名创建一个实例

并编写此代码:

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)