2

我有一个关于在 C# 中创建类的对象的问题,其中类名存储在字符串变量中

例如。字符串 str="飞行员"

As we create object of the class like this
ClassName objectname=new ClassName();

由于某种原因而不是 ClassName 我需要使用存储我的类名的字符串变量。

4

4 回答 4

2

您将使用Type.GetType(string)然后Activator.CreateInstance(Type)

Type type = Type.GetType(str);
object instance = Activator.CreateInstance(type);

笔记:

  • 类型名称必须包含命名空间,例如Foo.Bar.SomeClassName
  • 除非您指定程序集限定的类型名称,Type.GetType(string)否则只会查看当前正在执行的程序集和mscorlib. 如果要使用其他程序集,请使用程序集限定名称或Assembly.GetType(string)改用。
  • 这假设该类型有一个公共的无参数构造函数
  • 您的变量类型必须是,因为变量的类型是编译instance所需的一部分
于 2013-03-01T18:43:53.750 回答
0

这是一个例子。您可能需要指定完整的命名空间路径。

Namespace.Pilot config = (Namespace.Pilot)Activator.CreateInstance(Type.GetType("Namespace.Pilot"));
于 2013-03-01T18:43:23.953 回答
0

您将使用反射来这样做:

var type = Assembly.Load("MyAssembly").GetTypes().Where(t => t.Name.Equals(str));
return Activator.CreateInstance(type);
于 2013-03-01T18:44:08.290 回答
0

您可以通过使用来做到这一点Activator

var type = "System.String";
var reallyAString = Activator.CreateInstance(
        // need a Type here, so get it by type name
        Type.GetType(type), 
        // string's has no parameterless ctor, so use the char array one
        new char[]{'a','b','c'});
Console.WriteLine(reallyAString);
Console.WriteLine(reallyAString.GetType().Name);

输出:

abc
String
于 2013-03-01T18:44:38.113 回答