加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C#中的set和get访问器使用

(2017-04-18 20:10:19)
分类: C#

面向对象编程的一个规则是:使用户只需要指定对象能做什么,而不需要去指定或者了解对象是如何完成该的。属性是对象内部的数据,用户如果能够直接访问对象内部数据,显然就违反了上述规则。通过getset访问器来访问,就保持了这种规则,而且还提供了额外的功能,如对值进行检查,实现只读或只写属性等。面向对象的程序是不可以直接用类自己定义的属性的,可以通过set get 来对类的属性进行封装。

 

一般面向对象编程语言都要求成员变量不能直接暴露给外部访问,如下:

public class A

{

    public int Age;   //这是不好的,待会有程序员可能把-1赋给Age

}

为了防止乱赋值,C#设计了一个属性机制,要求把成员变量设为私有,再通过属性来控制成员变量的读写,如下:

public class B

{

    private int age;  //私有成员变量

    public int Age    //age的属性

    {

        get{ return age; }  //读取器

        set{                //写入器

            if(value>0)

              age = value;   //value是准备写入的值

        }

    }

}

这样Age就像保安一样,挡在age的前面。访问age的时候需要通过Age许可,如下:

B b = new B();

b.Age = -1;  //这是不行的,-1被带入valuevalue<0,判断不成立

b.Age = 10;  //这是可行的

 

属性的分类方式按照所使用的访问器类型进行分类,只带有get 访问器的属性称为只读属性,无法对只读属性赋值。只带有 set 访问器的属性称为只写属性,只写属性除作为赋值的目标外,无法对其进行引用。同时带有 get set 访问器的属性为读写属性。

在属性声明中,get set 访问器都必须在属性体的内部声明。get访问器与方法体相似,它必须用return关键字返回字段类型的值,执行get访问器相当于读取字段的值,get访问器必须在returnthrow 语句中终止,并且访问器作用区域不能超出访问器体;set访问器与返回void的方法类似,它使用称为value的隐式参数,此参数的类型是属性的类型。使用 get 访问器更改对象的状态是一种错误的编程样式。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有