类中的私有字段只能在类的内部访问,而对类的公有字段的访问却不受限制。
在以前,为了封装,程序中会尽量少使用公有字段,因为使用公有字段的话,会让程序失去控制权。所以程序中会大量使用私有字段。不过,使用私有字段时,需要程序为私有字段定义额外的取值方法和赋值方法。
下面的示例代码定义了一个私有字段age来表示年龄,同时定义了取值方法GetAge()及赋值方法SetAge()供外部来调用,通过这两个方法,外部的对象就可以来访问私有变量age了。
private int age;
public void SetAge(int age)
{
this.age = age;
}
public int GetAge()
{
return this.age;
}
使用这种方法时,在SetAge()方法和GetAge()方法中可以增加相应的控制代码来防止外部对age的非法访问。如使用下面的代码就可以避免将一个负数赋值给age,因为一个人的年龄不可能小于0。
public void SetAge(int age)
{
if (age > 0)
{
this.age = age;
}
}
不过这种方法比起使用公有字段,略显麻烦。
要是使用公有字段的话,则只需使用下面的定义代码(就短短一行哦,不过安全性就不要再想了):
public int Age;
这样,在类的外部就可以使用下面的代码来访问这个公有字段了:
x.Age = 10;//x为模拟类实体
而在类的外部,私有字段的访问就必须通过赋值方法和取值方法来完成了。
x.SetAge(10); //x为模拟类实体
虽然访问私有字段与公有字段都是短短一行代码,但是访问私有字段却要通过一个方法,感觉还是什么了点(至于是什么,天知道),呵呵。
下面简单总结一下:
使用“私有字段+赋值方法+取值方法”的方式略显麻烦但是可以保证字段的安全性。
而使用公有字段方式简单但是却无法保证字段的安全性。
很显然,安全性肯定要比简单性对程序影响深远。这也就是以前很少使用公有字段的原因了。
难道我们就不能同时兼顾公有字段的简单性和私有字段的安全性吗。
答案是有的,属性满足我们的要求。
2.属性
在介绍属性前,先给出表示年龄的属性代码,如下:
private int age;
public int Age
{
get
{
return this.age;
}
set
{
if (value > 0)
{
this.age = value;
}
}
}
属性的访问代码如下:
x.Age = 10;//x为模拟类实体
是不是很熟悉啊,对的,和公有字段的访问方式一摸一样。
并且,在给属性赋值时,会调用属性的set方法(属性提供的set方法被称为set访问器,get方法被称为get访问器),在set方法中可以增加相应的控制代码来防止外部对私有字段age的非法访问。这与为私有字段添加的SetAge()方法的作用相同。
可见,属性就是我们需要的,同时兼顾了公有字段的简单性和私有字段的安全性。
最后,介绍一下属性的概念:属性是一个或一对方法(类似于为私有字段添加的赋值方法和取值方法),在客户机看来,他们是一个字段(类似于公有字段)。当属性定义中省略set访问器时,属性则为只读属性;当属性定义中省略get访问器,属性就为只写属性。
好了,就写到这里了。