我有一个关于在c#中创建类的对象的问题,其中类名存储在字符串变量中
例如。 String str =“Pilot”
As we create object of the class like this
ClassName objectname=new ClassName();
由于某种原因而不是ClassName,我需要使用存储我的类名的字符串变量。
答案 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