3.6 封装

  在C#中,封装就是将类成员中的字段、方法以及属性事件、委托等放在一个公共的结构中。按照一个公共的方法把数据和操作这些数据的方法进行组装(封装),同时为对象指定操作和属性,从而创建了新的数据类型提供给用户使用,而保证了私密的内容不会被用户察觉。

3.6.1 为什么要封装
  在应用程序开发,特别是面向组件开发的过程中,常常会将类成员中的字段、方法、属性及事件封装在一个类或命名空间内。当把数据和方法封装后,就可以指定方法和属性,对于外部使用者而言,他们无需知道类是怎样设计的,只需要关心如何实现信息,让用户成为类的使用对象。正如在.NET中的System.Web命名空间或者类型转换Convert.ToInt32一样,开发人员知道这个命名空间或者这个类的静态方法是做什么的,却不知道这个方法内部的代码。

  这些方法的内部代码对开发人员是封闭的,保证内部代码的隐私和安全,开发人员只需要使用方法或者覆盖方法来达到自己编程的目的。例如一台电脑有显示器、主机等等外设,而相对于显示器而言,显示器是一个类,同样,机箱也是一个类,同样这些来还包括鼠标,键盘等。而显示器内部和机箱内部对一般的用户是不可见的,因为用户不知道怎样拆装显示器和机箱,但是用户知道怎样将插座相连,组成一个完整的计算机。封装能够让用户更加关注“计算机”本身,而不去关注“计算机”内部是怎样实现的。

  这种抽象方便了封装人员便于改变内部实现细节,在改变了内部细节之后,用户通常情况下不会感到有任何的差异。

注意:例如.NET中,在.NET从1.1到2.0然后到3.X,很多的细节被改变,因为类或方法有了改变。但是大部分情况下,很多的细节改变了,而使用的方法没有改变,特别是从2.0到3.5。

3.6.2 类的设计
  在设计一个类时,应该尽量的隐藏细节,只暴露那些开发人员或者类使用者需要知道的操作和数据。这样就方便了代码的维护,实现了在使用者无需改变与类成员交互方式的前提下,对类的实现细节进行更改。

  在C#中,没有对类成员或方法的公共属性进行设置,则默认的权限是private(私有的)。而在类的设计中,尽量将使用的类成员设置为私有的权限,因为这样保证了代码的安全性,也让使用者更加关心怎样与类成员进行交互。而可以对一些共有的属性或者与方法交互的一些字段设置成为public(共有的),除非认为字段是有用的,否则一般不予暴露。这种方式不仅保护了类成员,同样也让维护变得简单,示例代码如下所示。
+展开
-C#
    class Car//创建一个类
    {
        public void GetCar()//创建类的方法
        {
            int i = 1;//声明整型变量
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Car myCar = new Car();//使用类创建对象
            myCar.GetCar();//使用了对象的一个方法
        }
    }

  上述代码创建了一个汽车(car)类,在主方法中使用类,同样,当对Car类的类成员做修改时,不会影响到用户的使用,示例代码如下所示。
+展开
-C#
    class Car//创建一个类
    {
        public void GetCar()//创建类的方法
        {
            int i = 1;//声明变量
            int j = 0;//更改了类内部的实现细节
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Car myCar = new Car();//创建对象
            myCar.GetCar();//使用方法依旧没有改变
        }
    }

  同样,在对类进行了封装之后,用户不知道类是怎样实现的,但是同样能够创建类或对象,这如前面的章节中命名空间一样。通常情况下开发人员会建立一个类库,使用者需要引用类库,并调用类库中的代码,而无需知道类库中的代码是怎样实现的,示例代码如下所示。
+展开
-C#
    class Program//应用程序主类
    {
        static void Main(string[] args)//应用程序入口方法
        {
            Car myCar = new Car();//使用Car类,而使用者并不知道细节
            myCar.GetCar();//使用方法
        }
    }

加支付宝好友偷能量挖...


评论(0)网络
阅读(114)喜欢(0)Asp.Net/C#/WCF