如何创建类的对象,其中类名存储在C#中的字符串变量中

时间:2013-03-01 18:40:53

标签: c#

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

例如。 String str =“Pilot”

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

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

4 个答案:

答案 0 :(得分: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,因为变量的类型是编译时间所需内容的一部分

答案 1 :(得分:0)

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

Namespace.Pilot config = (Namespace.Pilot)Activator.CreateInstance(Type.GetType("Namespace.Pilot"));

答案 2 :(得分:0)

您可以使用Reflection执行此操作:

var type = Assembly.Load("MyAssembly").GetTypes().Where(t => t.Name.Equals(str));
return Activator.CreateInstance(type);

答案 3 :(得分: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