zwvista

导航

编程漫谈系列(2)字段与属性

字段(fields)与属性(properties)的定义

  • 字段与属性都是OOP(面向对象编程)中的概念。
  • 字段是指封装在类或对象中的数据,因此也被叫做数据成员(data member)或成员变量(member variable)。
  • 属性是指从属于类或对象的一种介于字段和方法之间的特殊成员:属性可以像字段一样读和写,但是读和写通常被翻译成类或对象的 getter(读取器) 和 setter(设置器) 方法。读取器和设置器统称为存取器(accessor)。
  • 在 getter 方法里,属性可以用来实现只读(readonly),计算(computed),门面(facade),惰性(lazy)以及单例(singleton)等诸多特性。
  • 在 setter 方法里,属性可以用来实现数据检验(data validation)和用户界面的实时更新(active update)。

字段和属性的可用性

  • 在一些老的程序语言(C++, Java)中,只有字段没有属性,属性通过 getter 和 setter 来模拟实现。
  • 由于在Java语言中用于实现属性的 getter 和 setter 的方法名具有一定的命名规则,并且属性在框架中广泛使用,所以一般来说可以认为Java语言中事实上存在属性。
  • 在C#语言中,字段和属性同时存在。带 getter 或/和 setter 的为属性,不带的为字段。
  • 在一些新的程序语言(Swift,Kotlin)中,只有属性没有字段。属性缺省带有 getter 和 setter。

只读字段/属性

只读字段:只能设置一次值之后便只能读取不能再修改的字段。

// C#
readonly int year;
// Java
final int year = ...;
// C++
const int year = ...;

只读属性:只有 getter 没有 setter 的属性。

// C#

对外只读对内可写的属性

处于封装性的需要,有些属性需要对访问权限进行限制,在对象内部可读可写,而在对象外部则只读。

计算属性

门面属性

懒惰属性

单例属性

数据检验

实时更新

posted on 2018-01-03 21:11  zwvista  阅读(311)  评论(0编辑  收藏  举报