10.1.1 对比其他编程语言中的属性
如果你将这与Java或C#进行比较,在这两种语言中,属性都映射到方法,但是Java中是一种隐式的映射(属性基本上是一种约定),而不是显式的编程元素。与Java类似,C#属性也映射到相应的getter和setter方法,但属性是明确定义的编程元素。
// Properties in Java
private int mMonth;
public int getMonth() { return mMonth; }
public void setMonth(int value) {
if (value < = 0)
mMonth = 1;
else
mMonth = value;
}
int s = date.getMonth();
date.setMonth(s + 1);
// Properties in C#
private int mMonth;
public int Month {
get { return mMonth; }
set {
if (value < = 0)
mMonth = 1;
else
mMonth = value;
}
}
date.Month++;
尽管我不想深入讨论不同编程语言中属性的相对优点,但正如我在本章引言中提到的,我认为明确定义属性是一个有用的概念,而不需要一个额外的方法就将属性映射到某个字段,从而获得一个更进一步的抽象层次也是一个非常不错的补充。这就是为什么我更喜欢Object Pascal中属性的实现,而不是其他语言