字符串类名转为类的问题
大家好:现在有一个这样的问题不知道在C#里怎么实现。有一个字符串“命名空间+类名”,如:xxx.xxx.com.class
如果转化得到类,请大家帮忙,已经好几天了没解决。
我知道java里是这样实现的:Class aClass = Class.forName(xxx.xxx.com.class);
不知道C#里是怎么对应实现的? --------------------编程问答-------------------- 用反射,,, --------------------编程问答--------------------
Assembly.CreateInstance货Activator.CreateInstance。如果动态加载dll类库创建实例建议用Assembly;
如果用Remoting或WebService之类的远程对象则用Activator; --------------------编程问答-------------------- 老大们,不要实例,只转化得到类!!!!!!只想要类!!!!!! --------------------编程问答-------------------- 相当地简单:
Type t = Type.GetType("System.String");
Type t = Type.GetType("xxx.xxx.com.class"); --------------------编程问答-------------------- C#的放射与你想象的略有不同。
你不会直接拿到类,但你能拿到描述这个类的Type。
你可以使用Type动态地创建它所描述的类的实例:
例如:
Type t;
t = Type.GetType("WindowsFormsApplication1.Form1");
Form F = (Form)t.Assembly.CreateInstance("WindowsFormsApplication1.Form1");
F.Show(); --------------------编程问答-------------------- 呵呵,这样更合适一些
Type t;
t = Type.GetType("WindowsFormsApplication1.Form1");
Form F = (Form)t.Assembly.CreateInstance(t.FullName);
F.Show();
或者
System.Reflection.Assembly Assembly = System.Reflection.Assembly.GetExecutingAssembly();
Form F = (Form)Assembly.CreateInstance("WindowsFormsApplication1.Form1");
F.Show();
Type t = F.GetType(); --------------------编程问答-------------------- 上面,通过类名可创建实例,可得到类的Type
然后,可通过Type和实例执行调用方法,设置属性和字段等操作。
反射调用方法的步骤
Type t = 对象.GetType();//获取类型
System.Reflection.MethodInfo MethodInfo = t.GetMethod(方法名变量);//获取方法信息
MethodInfo.Invoke(对象,new Object[参数的个数]{参数1,参数2,……})//通过方法信息和对象实例,指定参数调用方法
反射设置属性值
string str1 = "属性名";
Type t = Resources.CommonResource.GetType();
System.Reflection.PropertyInfo propertyInfo = t.GetProperty(str1);
propertyInfo.SetValue(Resources.CommonResource, 你的值, null); --------------------编程问答--------------------
C#里是这样实现的:
var aClass = Assembly.GetExecutingAssembly().GetType("xxx.xxx.com.class");
如果要实例化可以这样:
--------------------编程问答-------------------- Type.GetType(“xxx.xxx.com.class”); --------------------编程问答-------------------- 只想要class,不要type,C#里好像无能为力了。
Activator.CreateInstance(aClass)
java里是这样实现的:Class aClass = Class.forName(xxx.xxx.com.class);
--------------------编程问答--------------------
是的,.net里要两句话
//获取类名为xxx.xxx.com.class的类型
var aClass = Assembly.GetExecutingAssembly().GetType("xxx.xxx.com.class");
//对象实例化。
var aClassObj= Activator.CreateInstance(aClass);
如果你有空,可以把这两句话写成一个FromName的方法。这样下次就只有一句话了。
PS:我想知道Java里怎么通过名称得到类型。
补充:.NET技术 , C#