C#反射类中所有字段,属性,方法(转)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#反射类中所有字段,属性,方法(转)相关的知识,希望对你有一定的参考价值。

可能大家都知道在C#中如何创建一个类,但对于类的结构可能大家不一定了解的很清楚,对于我来说,我之前也搞的不是很明白,今天,当我没事研究反射的时候突然发现了着一点。

我们来看类的结构到底是什么

技术分享
    public class People        //类名 
    { 
        private static string name;    //字段 
     
        private string sex;//字段 
     
        public string Sex     //属性 
        { 
            get { return sex; } 
            set { sex = value; } 
        } 
     
        public static string Name    //属性 
        { 
            get { return People.name; } 
            set { People.name = value; } 
        } 
     
        private People() //构造函数 
        { 
     
        } 
     
        public static string GetName()    // 函数 
        { 
     
            if (string.IsNullOrEmpty(name)) 
            { 
                name = "my name"; 
            } 
            return name; 
     
     
        } 
     
     
    } 
View Code

 

以上所有的构造函数、事件、字段、方法和属性都叫做成员,即Member

运行下列代码:

技术分享
    Type t = typeof(People); 
                 Console.WriteLine("----------------Method------------------"); 
                 MethodInfo[] methods = t.GetMethods( ); 
                foreach (MethodInfo method in methods) 
                { 
                    Console.WriteLine("Method:" + method); 
     
                    //Console.WriteLine(method); 
                    //Console.WriteLine("返回值:" + method.ReturnParameter); 
                } 
                Console.WriteLine("---------------Field-------------------"); 
                FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance|BindingFlags.Static); 
     
                foreach (FieldInfo field in fields) 
                { 
                    Console.WriteLine("Field:" + field); 
                } 
     
                Console.WriteLine("--------------Member--------------------"); 
                MemberInfo[] members = t.GetMembers(); 
     
                foreach (MemberInfo member in members) 
                { 
                    Console.WriteLine("Member:" + member); 
                } 
                Console.WriteLine("--------------Property--------------------"); 
                PropertyInfo[] properties = t.GetProperties( ); 
     
                foreach (PropertyInfo property in properties) 
                { 
                    Console.WriteLine("Property:" + property); 
                } 
                Console.WriteLine("--------------Constructor--------------------"); 
                ConstructorInfo[] constructors = t.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance); 
     
                foreach (ConstructorInfo constructor in constructors) 
                { 
                    Console.WriteLine("Constructor:" + constructor); 
                } 
View Code

 

输出结果为:

 

技术分享
    ----------------Method------------------ 
    Method:System.String get_Sex() 
    Method:Void set_Sex(System.String) 
    Method:System.String get_Name() 
    Method:Void set_Name(System.String) 
    Method:System.String GetName() 
    Method:System.String ToString() 
    Method:Boolean Equals(System.Object) 
    Method:Int32 GetHashCode() 
    Method:System.Type GetType() 
    ---------------Field------------------- 
    Field:System.String sex 
    Field:System.String name 
    --------------Member-------------------- 
    Member:System.String get_Sex() 
    Member:Void set_Sex(System.String) 
    Member:System.String get_Name() 
    Member:Void set_Name(System.String) 
    Member:System.String GetName() 
    Member:System.String ToString() 
    Member:Boolean Equals(System.Object) 
    Member:Int32 GetHashCode() 
    Member:System.Type GetType() 
    Member:System.String Sex 
    Member:System.String Name 
    --------------Property-------------------- 
    Property:System.String Sex 
    Property:System.String Name 
    --------------Constructor-------------------- 
    Constructor:Void .ctor() 
    请按任意键继续. . . 
View Code

 

另外,我们发现属性Sex和Name编译以后变成了get_Sex,get_Name,set_Sex,set_Name,呵呵,看来还是更java一样

原文出处:http://www.cnblogs.com/shuzhengyi/archive/2010/10/12/1848991.html

以上是关于C#反射类中所有字段,属性,方法(转)的主要内容,如果未能解决你的问题,请参考以下文章

c#的属性和反射,大约是啥回事

反射_获取类的信息

来自通用基类中的字段的 C# 反射 GetValue

.Net C# 反射,了解只需3分钟

day27(反射之内省机制)

(转)C#反射机制详解