反射是一个运行库类型发现的过程。
当我们要使用第三方的程序集,或运行库时,必须要在VS添加对该程序集的应用,才能使用该程序集或运行库。此过程就是反射的体现。
因为第三方程序集,运行库中的类型,属性方法,接口等内容,在没有进行反射前,对于我们的程序而言是未知,所以我们或者VS平台,无法发现和使用它们。
在.NET中,反射主要涉及 System.Reflection 命名空间与System.Type类。
反射是发现一个运行库中的类型的过程,实际上就是发现并访问运行库中的类型的元数据。
System.Type类中的很多方法可以检查某个类型的元数据。它们 返回类型都位于System.Reflection 命名空间中。
所以我们要获得System.Type类的一个实例,之后就可以通过该实例去访问某个类型的元数据。
获得System.Type类的一个实例的方法:
1,使用System.Object.GetType()得到Type引用 ex:Sqlconnection conn = new Sqlconnection(....) ; Type t = t.GetType();
2, 使用typeof()得到Type引用 ex: Type t = typeof(Sqlconnect);
3,使用System.Type.GetType()得到Type引用 ex1: Type t = Type.GetType("Sqlconnection",false,true); (该函数有其他重载)
必须要知道类型名字的字符串形式
第一个BOOL值表示:是否在找不到结果的时候抛出异常;
第二个BOOL表示:是否区分大小写
上面三个方法的区别:1和2都需要,元数据编译时的信息; 1需要相应类型的实例;2只需要类型的名称就行; 3则不需要元数据编译时的信息
反射方法(获取类型中有哪些函数方法):
Sqlconnection conn = new Sqlconnection(connectionstring) ;
// 获取type应用,Type是一个抽象类不能直接New
Type t = t.GetType();
//System.Type类中的方法可以检查某个类型的元数据,如:GetMethods()。它们返回类型大都位于System.Reflection 命名空间中,如:Method。
MethodInfo[] mi = t.GetMethods();