现在的位置: 首页 > 综合 > 正文

C#中为什么使用字段封装

2013年09月15日 ⁄ 综合 ⁄ 共 1698字 ⁄ 字号 评论关闭

封装是OOP(面向对象编程)三大特征之一。

为什么需要封装?

首先看以下代码

Code:
  1. public class Student   
  2. {   
  3.               public int age;   
  4.               public string name;   
  5.                  
  6.               public void say()   
  7.              {   
  8.                     Console.WriteLine("大家好,我是{0},今年{1}岁",name,age.ToString());   
  9.              }   
  10. }  

试着编写测试类,实例化对象,调用其say方法

Code:
  1. Class Test   
  2. {   
  3.              static void Main()   
  4.              {   
  5.                     Student student = new Student();   
  6.   
  7.                     student.age = -20;   
  8.                     student.name = "hamber";   
  9.   
  10.                     student.say();   
  11.              }   
  12. }  

输出结果:我是hamber,今年-20岁。

以上的赋值是不符合实际生活的。

这就需要我们对类中的敏感字段进行有效约束,这就用到了C#中的属性.

Code:
  1. public class Student   
  2. {   
  3.                 private int age;   
  4.                 public int Age   
  5.                {   
  6.                    get{return age;}   
  7.                    set{age = value;}   
  8.                }   
  9.   
  10.               public string name;   
  11.   
  12.               public void say()   
  13.              {   
  14.                   Console.WriteLine("大家好,我是{0},今年{1}岁",name,Age.ToString());   
  15.             }   
  16. }  

在C#中,我们通常不会直接访问类中的字段,而是通过get和set访问器来访问,这种实现方式我们称为属性。

Code:
  1. private int age;   
  2. public int Age   
  3. {   
  4.              get{return age;}   
  5.              set{age = value;}   
  6. }  

get访问器用来返回相应的私有字段的值。用return来返回。

set访问器用来设定相应的私有字段的值,可以看做是一个隐含的输入参数。

如何使用属性:

(1)将类中的敏感字段私有化

(2)添加get、set访问器

(3)在其中书写逻辑判断

注意事项:

(1)定义属性时,类型必须与它所访问的字段类型一致。

(2)一般情况下,字段的名称是小写的,属性的名称与字段名称一样,只是首字母要大写。

                                                                     属性的类型

定义属性,我们可以给他设定值,也可以获取它的值。如果想保护属性关联的字段,则只允许读数据,或者只允许写数据,

那么应该如何设定呢?

属性除了可以约束数据访问外,还可以设定设置读写属性,来限定它的访问类型,我们可以设置该属性为只读属性,这种情况下,我们就只能读取字段的值而不能赋值,属性的访问分类为以下三种:

---只读属性,只包含get访问器

---只写属性,只包含set访问器

---读写属性,包含get和set访问器

get和set访问器的灵活运用,可以保障类中字段的安全。

抱歉!评论已关闭.