反射先了解

一:system.Type

獲取基本信息:

Type.Name   //類名

Type.FullName //完整路徑

Type.Namespace //空間名

systemPath 正確格式_Public

systemPath 正確格式_System_02

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

systemPath 正確格式_Public

systemPath 正確格式_System_02

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

systemPath 正確格式_Public

systemPath 正確格式_System_02

查看類型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():(但是感覺只能獲取屬性,還有靜態)

systemPath 正確格式_Public

systemPath 正確格式_System_02

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類型

systemPath 正確格式_Public

systemPath 正確格式_System_02

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類型

systemPath 正確格式_Public

systemPath 正確格式_System_02

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類型