封装是OOP(面向对象编程)三大特征之一。
为什么需要封装?
首先看以下代码
- public class Student
- {
- public int age;
- public string name;
- public void say()
- {
- Console.WriteLine("大家好,我是{0},今年{1}岁",name,age.ToString());
- }
- }
试着编写测试类,实例化对象,调用其say方法
- Class Test
- {
- static void Main()
- {
- Student student = new Student();
- student.age = -20;
- student.name = "hamber";
- student.say();
- }
- }
输出结果:我是hamber,今年-20岁。
以上的赋值是不符合实际生活的。
这就需要我们对类中的敏感字段进行有效约束,这就用到了C#中的属性.
- public class Student
- {
- private int age;
- public int Age
- {
- get{return age;}
- set{age = value;}
- }
- public string name;
- public void say()
- {
- Console.WriteLine("大家好,我是{0},今年{1}岁",name,Age.ToString());
- }
- }
在C#中,我们通常不会直接访问类中的字段,而是通过get和set访问器来访问,这种实现方式我们称为属性。
- private int age;
- public int Age
- {
- get{return age;}
- set{age = value;}
- }
get访问器用来返回相应的私有字段的值。用return来返回。
set访问器用来设定相应的私有字段的值,可以看做是一个隐含的输入参数。
如何使用属性:
(1)将类中的敏感字段私有化
(2)添加get、set访问器
(3)在其中书写逻辑判断
注意事项:
(1)定义属性时,类型必须与它所访问的字段类型一致。
(2)一般情况下,字段的名称是小写的,属性的名称与字段名称一样,只是首字母要大写。
属性的类型
定义属性,我们可以给他设定值,也可以获取它的值。如果想保护属性关联的字段,则只允许读数据,或者只允许写数据,
那么应该如何设定呢?
属性除了可以约束数据访问外,还可以设定设置读写属性,来限定它的访问类型,我们可以设置该属性为只读属性,这种情况下,我们就只能读取字段的值而不能赋值,属性的访问分类为以下三种:
---只读属性,只包含get访问器
---只写属性,只包含set访问器
---读写属性,包含get和set访问器
get和set访问器的灵活运用,可以保障类中字段的安全。