当前位置:  开发笔记 > 编程语言 > 正文

从字符串创建类的实例

如何解决《从字符串创建类的实例》经验,为你挑选了4个好方法。

有没有办法根据我在运行时知道类的名称来创建类的实例.基本上我会在字符串中有类的名称.



1> Matt Hamilto..:

看一下Activator.CreateInstance方法.


与很好的例子相关:http://stackoverflow.com/questions/493490/converting-a-string-to-a-class-name
例如:`var driver =(OpenQA.Selenium.IWebDriver)Activator.CreateInstance("WebDriver","OpenQA.Selenium.Firefox.FirefoxDriver").Unwrap();`
重要说明:.Unwrap()通过远程处理句柄,以便您可以实际进行转换.@Endy - 谢谢

2> Sarath Avana..:

它非常简单.假设您的类名是Car和命名空间Vehicles,然后传递Vehicles.Car返回类型对象的参数Car.像这样,您可以动态创建任何类的任何实例.

public object GetInstance(string strFullyQualifiedName)
{         
     Type t = Type.GetType(strFullyQualifiedName); 
     return  Activator.CreateInstance(t);         
}

如果您的完全限定名称(即,Vehicles.Car在这种情况下)在另一个程序集中,Type.GetType则将为null.在这种情况下,你循环遍历所有程序集并找到Type.为此,您可以使用以下代码

public object GetInstance(string strFullyQualifiedName)
{
     Type type = Type.GetType(strFullyQualifiedName);
     if (type != null)
         return Activator.CreateInstance(type);
     foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
     {
         type = asm.GetType(strFullyQualifiedName);
         if (type != null)
             return Activator.CreateInstance(type);
     }
     return null;
 }

现在,如果要调用参数化构造函数,请执行以下操作

Activator.CreateInstance(t,17); // Incase you are calling a constructor of int type

代替

Activator.CreateInstance(t);



3> Ray Li..:

我成功地使用了这个方法:

System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(string className)

您需要将返回的对象强制转换为所需的对象类型.


我明白你的意思了.这似乎是多余的.如果您知道类名,为什么需要动态字符串?一种情况可能是您对基类的转换和字符串表示该基类的后代.
我试图想象一个场景,通过类名创建对象然后将其转换为该类型将完全有意义.
如果已知基类,则可以使用基类或其接口作为参数来传递没有反射的后代.
有用的场景:您只需要序列化接口或任何其他非常常见的接口.你不会把它投射到课堂上,但至少要投射到一个以外的东西
如何从给定的字符串中进行____的转换??

4> PeteT..:

可能我的问题应该更加具体.我实际上知道字符串的基类,所以解决了它:

ReportClass report = (ReportClass)Activator.CreateInstance(Type.GetType(reportClass));

Activator.CreateInstance类有各种方法以不同的方式实现相同的功能.我可以将它投射到一个物体,但上面对我的情况最有用.


我建议您编辑问题并记下更改,而不是在问题部分回复.你会得到更多/更好的答案.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有