浅谈C#中的属性



                                                                           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赋值,相当于自己给自己赋值,每次都是自己调自己,然后自己给自己赋值,没完没了,纠结死了。有兴趣的可以自己试试


       

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值