如何获取字符串名称来解析对象(即从它的意义上来说)

des*_*scf 4 c# oop factory

例如,我可以做类似的事情:

switch (myString)
case "rectangle":
 o = new rect();
 break;
case "ellipse"
 etc...
Run Code Online (Sandbox Code Playgroud)

但是我怎么不做上面的事情,即只有一行代码直接从字符串中获取对象.想象一下,例如,一个按钮以及用户点击它时所说的任何内容,它会显示所显示的文本并从中创建一个对象.

And*_*are 6

如果名称与字符串完全相同,则可以执行以下操作:

using System;
using System.Reflection;

class Example
{
    static void Main()
    {
        var assemblyName = Assembly.GetExecutingAssembly().FullName;
        var o = Activator.CreateInstance(assemblyName, "Example").Unwrap();
    }
}
Run Code Online (Sandbox Code Playgroud)

一个更简单的方法看起来像这样:

using System;
using System.Reflection;

class Example
{
    static void Main()
    {
        var type = Assembly.GetExecutingAssembly().GetType("Example");
        var o = Activator.CreateInstance(type);
    }
}
Run Code Online (Sandbox Code Playgroud)

但请记住,这是一个非常简单的示例,它不涉及名称空间,强名称程序集或大型项目中出现的任何其他复杂事物.