C# 的反射_1特性簡單介紹
反射,可以理解為通過一定的方法獲得類或者物件的詳細資訊,從而瞭解物件的內部資訊,或者程式集的內部結構,可以動態的建立物件並執行其中的方法。
C# 或者 java 這種型別的語言才具有反射的功能,面向底層的C是不具有反射功能的。
C# 中反射所使用到的類,Type , 物件名.GetType() ; 或者 typeof(物件名) ; , 能夠獲得物件的型別
案列
namespace{
class program{
static void Main (string args){
object ol = 123 ;
Type
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 " ); }
}
}