1. 程式人生 > >C# 的反射_1特性簡單介紹

C# 的反射_1特性簡單介紹

反射,可以理解為通過一定的方法獲得類或者物件的詳細資訊,從而瞭解物件的內部資訊,或者程式集的內部結構,可以動態的建立物件並執行其中的方法。

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 " );  }

}

}