浅谈C#中的属性

来源:互联网 发布:淘宝分享到微信怎么弄 编辑:程序博客网 时间:2024/05/23 14:12



                                                                           C#中的属性

       1)属性的定义方式与字段类似,但包含的内容较多,它可以在修改状态之前额外的执行一些操作。属性可以说有两个函数块儿,一个是获取属性的值(也就是get),一个设置属性的值(也就是set)。而字段一般首字母为小写,属性为大写;

class person       //名为person的类{    private int age;    //名为age,int型私有字段    public int Age       //名为Age,public型共有属性,目的为    {                    //设置获取字段age,可根据需要设置不同访问级别        set        {            age = value;    //设置属性值,注意这里一定为value,        }                    //不需要问原因,牢记即可        get        {            return age;      //采用return返回age        }    }}

       2)这两个块儿也叫访问器,分别用set(设定)和get(获取)这两个关键字来定义;

       3)可以在访问器上设置访问级别,例如可以设置为公有(public),私有(private)保护(protect),但是这里的访问级别针对的是此类以外的其他进行访问,例如若将基类中的访问器设置为private,那么派生类则不能使用基类中的访问器,当当然自身当然可以访问自身的访问器;

       4)访问器可以根据需要设置为只读属性,只写属性,或者既读又写属性。所谓只读属性,是指只创建get而忽略set块儿,只写属性是指只创建set块儿,而忽略get块儿。既读又写属性是指既创建set块儿,又创建get块儿。

   public int MyIntProp     //只写属性,只有set    {          set         {             //property get code         }    }
   public int MyIntProp     //只读属性,只有get    {          get         {             //property get code         }    }

下面看一个类和属性的简单代码

static void Main(string[] args)        {            person p1 = new person();           //类的实例化            p1.Age = 30;                        //对访问器设置值,注意这里是Age而不是age            Console.WriteLine("{0}", p1.Age);            Console.ReadKey();        }        class person        {            private int age;            public int Age            {                set                {                    this.age = value;          //注意这里是age而不是Age                }                get                 {                    return this.age;           //假如set和get中age都换为Age会是什么情形                }             }        }

将age换为Age

 static void Main(string[] args)        {            person p1 = new person();            p1.Age = 30;            Console.WriteLine("{0}", p1.Age);            Console.ReadKey();        }        class person        {            private int age;            public int Age            {                set                {                    this.Age = value;  //此时已经将age换为Age                }                get                 {                    return this.Age;                }            }        }
想想会出现什么情况?

会出现无限循环,错误原因是“System.StackOverflowException”,就是一直在循环,计算机给憋死了,不干了。因为

this.Age = value;
会不断的调用此属性,属性名字是Age,然后又给Age赋值,相当于自己给自己赋值,每次都是自己调自己,然后自己给自己赋值,没完没了,纠结死了。有兴趣的可以自己试试


       

      

原创粉丝点击