如何动态实例化类?(马上给分)
我得到了一个字符串 "clsMyPart ",有一个类也叫clsMyPart,如何把字符串转为类啊
比如:
string strClass = "ConvertTo ";
strClass myClass = new strClass();
这样写肯定是错的,我该怎么写?
-----------------------------------
搜了一下,好像需要反射
Type type = Type.GetType( "Customnamespace.ConvertTo ", true);
object newInstance = Activator.CreateInstance(type);
string a = newInstance.DateTimeType( "2007-02-01 ");
//DateTimeType是ConvertTo类下的一个方法;
运行报错:newInstance不包括DateTimeType的定义,也就是没有实例化成功;把string a = newInstance.DateTimeType( "2007-02-01 ");屏蔽掉,调试,结果是:
----------------------
未能从程序集“App_Web_2pnyfszs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“Customnamespace.ConvertTo”。
----------------------
type为空,请问应该怎么写?
------解决方案--------------------MethodInfo m = type.GetMethod( "DateTimeType ");
m.Invoke(newInstance,参数
------解决方案--------------------Type t = Type.GetType( "MyNamespace.clsMyPart ");
MyNamespace.clsMyPart s = (MyNamespace.clsMyPart)Activator.CreateIntance(t);
------解决方案--------------------clsMyPart obj=(clsMyPart)Assembly.Load( "MyNamespace ").CreateInstance( "MyNamespace.clsMyPart ");
------解决方案--------------------object newInstance = Activator.CreateInstance(type);
string a = newInstance.DateTimeType( "2007-02-01 ");
这句是有问题的,因为newinstance不过是个object,所以说你最好先做类型判断,然后用as转换过来,这样才能用啊,你现在的做法不就是一个object要有DataTimeType这个方法了
------解决方案--------------------object a=assembly.load( "dll名 ").createinstance( "空间名.类名 ");
这样可以吗
个人见解,共同学习
------解决方案--------------------object o = CreateStrClass(strClass );
private CreateStrClass(string className)
{
if (className= "strClass ")
return new strClass();
}
以上只是一种实现方式,如果你对设计模式熟悉的话,应该能看出这是一个典型的工厂模块.具体情况,还是需要你适当根据应用需求作修改.
PS:我感觉你的这部分代码设计有问题:1、我不知道为什么你把变量名和类名搞成一样;2、string本身也是一个类,3、对于反射的应用一定谨慎,因为那是以牺牲性能换来灵活性,反射还有一个问题就是类型的不安全性。