反射先了解
一:system.Type
獲取基本信息:
Type.Name //類名
Type.FullName //完整路徑
Type.Namespace //空間名
public class student
{
public int Id { set; get; }
public string Name { set; get; }
public int Age { set; get; }
}
static void Main(string[] args)
{
student s = new student() { Id = 1, Name = "zzj", Age = 12 };
Type t = typeof(student);
//查看類信息
Console.WriteLine("Name={0},FullName={1},Namespace={2}", t.Name, t.FullName, t.Namespace);
}
View Code
效果圖:
Name=student
FullName=win32.反射+student
Namespace=win32
二。反射下的幾個重要方法
System.Reflection.
PropertyInfo:封裝類型屬性信息
ConstructorInfo:類型構造函數
MethodInfo:類型的方面名稱
EventInfo:類型事件信息
ParameterInfo:方法、構造函數信息
MemberInfo:成員類型 Type.GetMembers()/GetMember()/FindMember()
1.成員信息 與 memberInfo
StringBuilder sb = new StringBuilder();
MemberInfo[] me = t.GetMembers();//get page member
sb.Append("查看類型" + t.Name + t.Name + "的成員信息");
foreach (MemberInfo m in me) {
sb.Append("成員"+m.ToString().PadRight(50)+"類型:"+m.MemberType+"\n");
}
Console.WriteLine(sb);
View Code
查看類型studentstudent的成員信息成員Void set_Id(Int32)
類型:Method
成員Int32 get_Id() 類型:Method
成員Void set_Name(System.String) 類型:Method
成員System.String get_Name() 類型:Method
成員Void set_Age(Int32) 類型:Method
成員Int32 get_Age() 類型:Method
成員System.String ToString() 類型:Method
成員Boolean Equals(System.Object) 類型:Method
成員Int32 GetHashCode() 類型:Method
成員System.Type GetType() 類型:Method
成員Void .ctor() 類型:Constructor
成員Int32 Id 類型:Property
成員System.String Name 類型:Property
成員Int32 Age 類型:Property
成員win32.反射+student+major 類型:NestedType
請按任意鍵繼續. . .
View Code
2.字段信息與FieldInfo類型
如果希望獲取一個類型的所有字段,可以使用GetFields()方法,再次添加一個方法
FieldExplore():(但是感覺只能獲取屬性,還有靜態)
static void FieldExplor(Type t) {
StringBuilder sb = new StringBuilder();
FieldInfo[] fields = t.GetFields();
sb.Append("查看類型" + t.Name + "的字段信息:\n");
sb.Append(string.Empty.PadLeft(50, '-') + "\n");
foreach (FieldInfo fi in fields) {
sb.Append("名稱:" + fi.Name + "\n");
sb.Append("類型:" + fi.FieldType + "\n");
sb.Append("特性:" + fi.Attributes + "\n");
}
Console.WriteLine(sb.ToString());
}
View Code
查看類型student的字段信息:
--------------------------------------------------
名稱:love
類型:System.String
特性:Public
名稱:Lv
類型:System.Int32
特性:Public, Static
3.屬性信息與PropertyInfo類型
static void PropertydExplor(Type t)
{
StringBuilder sb = new StringBuilder();
PropertyInfo[] fields = t.GetProperties();
sb.Append("查看類型" + t.Name + "的屬性信息:\n");
sb.Append(string.Empty.PadLeft(50, '-') + "\n");
foreach (PropertyInfo fi in fields)
{
sb.Append("名稱:" + fi.Name + "\n");
sb.Append("類型:" + fi.PropertyType + "\n");
sb.Append("可讀:" + fi.CanRead + "\n");
sb.Append("可寫:" + fi.CanWrite + "\n");
sb.Append("特性:" + fi.Attributes + "\n");
}
Console.WriteLine(sb.ToString());
}
View Code
查看類型student的屬性信息:
--------------------------------------------------
名稱:Id
類型:System.Int32
可讀:True
可寫:True
特性:None
名稱:Name
類型:System.String
可讀:True
可寫:True
特性:None
名稱:Age
類型:System.Int32
可讀:True
可寫:True
特性:None
4.方法信息與MethodInfo類型
static void MethodExplore(Type t)
{
StringBuilder sb = new StringBuilder();
MethodInfo[] me = t.GetMethods();//get page member
sb.Append("查看類型" + t.Name + t.Name + "的成員信息");
foreach (MethodInfo m in me)
{
sb.Append("名稱:" + m.Name + "\n");
sb.Append("簽名:" + m.ToString() + "\n");
sb.Append("屬性:" + m.Attributes + "\n");
sb.Append("返回值類型:" + m.ReturnType + "\n");
}
Console.WriteLine(sb);
}
View Code
查看類型studentstudent的成員信息名稱:set_Id
簽名:Void set_Id(Int32)
屬性:PrivateScope, Public, HideBySig, SpecialName
返回值類型:System.Void
名稱:get_Id
簽名:Int32 get_Id()
屬性:PrivateScope, Public, HideBySig, SpecialName
返回值類型:System.Int32
名稱:set_Name
簽名:Void set_Name(System.String)
屬性:PrivateScope, Public, HideBySig, SpecialName
返回值類型:System.Void
名稱:get_Name
簽名:System.String get_Name()
屬性:PrivateScope, Public, HideBySig, SpecialName
返回值類型:System.String
名稱:set_Age
簽名:Void set_Age(Int32)
屬性:PrivateScope, Public, HideBySig, SpecialName
返回值類型:System.Void
名稱:get_Age
簽名:Int32 get_Age()
屬性:PrivateScope, Public, HideBySig, SpecialName
返回值類型:System.Int32
名稱:ToString
簽名:System.String ToString()
屬性:PrivateScope, Public, Virtual, HideBySig, VtableLayoutMask
返回值類型:System.String
名稱:Equals
簽名:Boolean Equals(System.Object)
屬性:PrivateScope, Public, Virtual, HideBySig, VtableLayoutMask
返回值類型:System.Boolean
名稱:GetHashCode
簽名:Int32 GetHashCode()
屬性:PrivateScope, Public, Virtual, HideBySig, VtableLayoutMask
返回值類型:System.Int32
名稱:GetType
簽名:System.Type GetType()
屬性:PrivateScope, Public, HideBySig
返回值類型:System.Type
5.ConstructorInfo類型和EventInfo類型