例如,我可以做类似的事情:
switch (myString)
case "rectangle":
o = new rect();
break;
case "ellipse"
etc...
Run Code Online (Sandbox Code Playgroud)
但是我怎么不做上面的事情,即只有一行代码直接从字符串中获取对象.想象一下,例如,一个按钮以及用户点击它时所说的任何内容,它会显示所显示的文本并从中创建一个对象.
如果名称与字符串完全相同,则可以执行以下操作:
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)
但请记住,这是一个非常简单的示例,它不涉及名称空间,强名称程序集或大型项目中出现的任何其他复杂事物.