反射,可以理解为通过一定的方法获得类或者对象的详细信息,从而了解对象的内部信息,或者程序集的内部结构,可以动态的创建对象并执行其中的方法。
C# 或者 java 这种类型的语言才具有反射的功能,面向底层的C是不具有反射功能的。
C# 中反射所使用到的类,Type , 对象名.GetType() ; 或者 typeof(对象名) ; , 能够获得对象的类型
案列
namespace{
class program{
static void Main (string args){
object ol = 123 ;
Type t = ol.GetType() ;
Type t1 = typeof( ol ) ;
Console.Writeline( t ); / / 输出 t 或者 t1 都 可以获得 t 或 t1 的具体类型
Type personType = typeof(Person);
MethodInfo[ ] mdInfo = personType.GetMethods(); / / 返回所有的公有方法 (可以用foreach遍历)
/ / personType.GetMethods( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance ); //加筛选条件可以访问私有字段
Type bsType = personType.BaseType(); / / 可以获得该类型的父类,返回的是Type类型,可以继续 .BaseType(); 获取父类
FieldInfo[ ] fi = personType.GetFields(); / / 获得公有的字段信息,同样加筛选条件可以访问私有的字段信息。
PropertyInfo[ ] pi = personType.GetProperties(); / / 获得公有的属性信息,同样加筛选条件可以访问私有的字段信息。
}
}
public class Person{ / / Psrson中有公有和私有的字段,属性,方法,可以通过反射的方式来获得其中的私有的部分
public int id{set ; get ;}
public string name{set; get; }
privae string age{set ; get ;}
private string sex{set ; get ;}
public int publicInt =0;
private int privateInt = 0;
public void PublicHello(){ Console.WriteLine( " public function " ); }
private void PrivateHello(){ Console.WriteLine(" private function " ); }
}
}