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; 

        } 

    } 

以上所有的构造函数、事件、字段、方法和属性都叫做成员,即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);
                } 

输出结果为:

    ----------------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()
    请按任意键继续. . . 

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

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

时间: 2024-10-15 16:31:12

C#反射类中所有字段,属性,方法(转)的相关文章

JNI_Z_03_类中的字段和方法的签名

1. Java类型 相应的签名 例子 boolean Z byte B char C short S int I long L float F double D void V Object L用"/"分割的完整类名; Ljava/lang/String; Array [签名 [I [Ljava/lang/String; Method (参数1类型签名参数2类型签名...)返回值类型签名 ZC: 我的分类:ZC: (A).类型签名ZC: (A.1).单个 类型签名ZC: (1).bool

Java通过反射机制修改类中的私有属性的值

首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username的值: //创建一个类的对象 PrivateField privateField = new PrivateField(); //获取对象的Class Class<?> classType = privateField.getClass(); //获取指定名字的私有域 Field field =

php面向对象类中常用的魔术方法

php面向对象类中常用的魔术方法 1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct() class construct{ public function __construct(){ $this->var = "this is var"; } } class con2 extends construct{ public function __construct(){ $

UnSafe类中的一些重要方法

UnSafe类中的一些重要方法 JDK中的rt.jar保重Unsafe类中提供了硬件级别的原子性操作,Unsafe类中的方法都是navtice方法,他们使用JNI的方式访问C++实现库,下面我们来了解一下Unsafe提供的几个主要方法以及编程时如何使用Unsafe类做一些事情. long objectFieldOffset(Field field)方法:返回指定变量所属类中的内存偏移量,该偏移量仅在使用该Unsafe函数中访问指定字节时使用.如下代码使用Unsafe获取变量value在Atomi

python在类中使用__slot__属性

在类中定义__slot__属性来限制实例的属性字段,在创建大量对象的场合可以减少内存占用. 创建大量对象是内存占用对比: 类中不使用__slot__ class MySlot:def __init__(self, a, b, c): self.a = a self.b = b self.c = c @profile() def main(): myObj_list = list() for i in range(50000): myObj = MySlot(i, i, i) myObj_list

schema中的虚拟属性方法

schema中的虚拟属性方法相当于vue中的计算属性,它是通过已定义的schema属性的计算\组合\拼接得到的新的值 var personSchema = new Schema({ name: { first: String, last: String } }); var Person = mongoose.model('Person', personSchema); // create a document var bad = new Person({ name: { first: 'Walt

增加、删除类文件或者在一个类中增加、删除方法时,是不能够热部署到服务上的。这时候需要停止服务器重新部署后再启动,就不会出现上面的提示了。

Hot Code Replace Failed 2010-11-05 10:11listquiry | 浏览 14226 次 Some code changes cannot be hot swapped into a running virtual machine, such as changing method names or introducing errors into running code.The current target virtual machine {jboss4Ser

【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法

现在也算是刚刚基本完成了自己的第一个商业项目,在开发的过程中,参考了不少人的代码风格,然而随着工作经验的积累,终于开始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. 首先,在现在的项目中使用的主要是afinal框架,而且这个框架确实比较不错,省去了不少工作量,在编写Activity的过程中,基本都是直接继承自FinalActivity类,这样可以使用这个类给我们封装好的不少的方法,但是随着项目慢慢推进,这种直接继承框架类的一些缺点也开始慢慢的显现出来.最主要的就

org.apache.commons.lang3.StringUtils类中isBlank和isEmpty方法的区别

相信很多java程序员在写代码的时候遇到判断某字符串是否为空的时候会用到StringUtils类中isBlank和isEmpty方法,这两个方法到底有什么区别呢?我们用一段代码来阐述这个区别吧: 1 @Test 2 public void blankEmpty() { 3 String str = " "; 4 System.out.println("Is empty ? " + StringUtils.isEmpty(str)); 5 System.out.pri