博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 反射 通过类名创建类实例
阅读量:6834 次
发布时间:2019-06-26

本文共 2440 字,大约阅读时间需要 8 分钟。

“反射”其实就是利用程序集的元数据信息。 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间。

1、假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): 

Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) 
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例 

2、若要反射当前项目中的类(即当前项目已经引用它了)可以为:

Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集 

object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例,返回为 object 类型,需要强制类型转换

3、也可以为:

Type type = Type.GetType("类的完全限定名"); 

object obj = type.Assembly.CreateInstance(type); 
======================================================= 
补充:
1)反射创建某个类的实例时,必须保证使用类的完全限定名(命名空间 + 类名)。Type.GetType 方法返回 null 则意味搜索元数据中的相关信息失败(反射失败),请确保反射时使用类的完全限定名。
2)反射功能十分强大,没有什么不能实现的。若实现“跨程序集”,请使用第一种方法创建类的实例,并反射该实例的字段、属性、方法、事件... 然后动态调用之。

 

/*参考:http://www.cnblogs.com/encoding/archive/2010/09/10/1823399.html     *     http://www.cnblogs.com/encoding/archive/2010/09/10/1823444.html     * */    ///     /// 反射帮助类    ///     public static class ReflectionHelper    {        ///         /// 创建对象实例        ///         /// 
/// 命名空间.类型名 /// 程序集 ///
public static T CreateInstance
(string fullName, string assemblyName) { string path = fullName + "," + assemblyName;//命名空间.类型名,程序集 Type o = Type.GetType(path);//加载类型 object obj = Activator.CreateInstance(o, true);//根据类型创建实例 return (T)obj;//类型转换并返回 } ///
/// 创建对象实例 /// ///
要创建对象的类型
///
类型所在程序集名称 ///
类型所在命名空间 ///
类型名 ///
public static T CreateInstance
(string assemblyName, string nameSpace, string className) { try { string fullName = nameSpace + "." + className;//命名空间.类型名 //此为第一种写法 object ect = Assembly.Load(assemblyName).CreateInstance(fullName);//加载程序集,创建程序集里面的 命名空间.类型名 实例 return (T)ect;//类型转换并返回 //下面是第二种写法 //string path = fullName + "," + assemblyName;//命名空间.类型名,程序集 //Type o = Type.GetType(path);//加载类型 //object obj = Activator.CreateInstance(o, true);//根据类型创建实例 //return (T)obj;//类型转换并返回 } catch { //发生异常,返回类型的默认值 return default(T); } } }
View Code

 

你可能感兴趣的文章
Javascript Array Functions --Js 数组方法汇总
查看>>
安装arcgis server 10.2遇到的问题总结
查看>>
查看他人数据接口的安全校验机制
查看>>
react 通过 classnames 处理 多个class 的问题
查看>>
倒计时原理
查看>>
让ul中的li居中显示
查看>>
XJOI网上同步训练DAY2 T2
查看>>
Codeforces 509F Progress Monitoring
查看>>
spring cloud: eureka搭建
查看>>
导弹拦截
查看>>
两个被广泛使用的Model Checking工具
查看>>
BZOJ 4999 This Problem Is Too Simple!
查看>>
POJ - 1995 Raising Modulo Numbers 【快速幂】
查看>>
dwr 文件上传
查看>>
第二章 在HTML中使用JavaScript
查看>>
C++的explicit关键字
查看>>
《SQL Server性能调优实战》知识点汇总
查看>>
JS 中文乱码
查看>>
原生JS实现音乐播放器!
查看>>
hive-安装MySQL(centos6.4)
查看>>