C#中的set和get访问器使用
(2017-04-18 20:10:19)分类: C# |
面向对象编程的一个规则是:使用户只需要指定对象能做什么,而不需要去指定或者了解对象是如何完成该的。属性是对象内部的数据,用户如果能够直接访问对象内部数据,显然就违反了上述规则。通过get和set访问器来访问,就保持了这种规则,而且还提供了额外的功能,如对值进行检查,实现只读或只写属性等。面向对象的程序是不可以直接用类自己定义的属性的,可以通过set get 来对类的属性进行封装。
一般面向对象编程语言都要求成员变量不能直接暴露给外部访问,如下:
public class A
{
}
为了防止乱赋值,C#设计了一个属性机制,要求把成员变量设为私有,再通过属性来控制成员变量的读写,如下:
public class B
{
}
这样Age就像保安一样,挡在age的前面。访问age的时候需要通过Age许可,如下:
B b = new B();
b.Age =
-1;
b.Age =
10;
属性的分类方式按照所使用的访问器类型进行分类,只带有get 访问器的属性称为只读属性,无法对只读属性赋值。只带有 set 访问器的属性称为只写属性,只写属性除作为赋值的目标外,无法对其进行引用。同时带有 get 和 set 访问器的属性为读写属性。
在属性声明中,get 和set 访问器都必须在属性体的内部声明。get访问器与方法体相似,它必须用return关键字返回字段类型的值,执行get访问器相当于读取字段的值,get访问器必须在return或throw 语句中终止,并且访问器作用区域不能超出访问器体;set访问器与返回void的方法类似,它使用称为value的隐式参数,此参数的类型是属性的类型。使用 get 访问器更改对象的状态是一种错误的编程样式。