ASP.NET Web 应用开发实战快速上手系列 3—C#面向对象编程纲要-类

 

注:部分资料来源互联网 

 

1、什么是对象

  真实世界中,一切皆为对象,一辆车、一个苹果、一张桌子、一个人,都是对象。

  而C#中的对象是表示数据和行为的构造。

 

2、什么是面向对象

  一切操作以对象为基础。

      

      面向对象的四大原则

      1)抽象(Abstraction):

      就是找到事物的本质,从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如汽车、火车、飞机,它们共同的特性就是交通工具。得出交通工具这个概念的过程,就是一个抽象的过程。所以,要抽象,就必须进行比较,没有比较就无法找到共同的部分。

     共同特征是指那些能把一类事物与他类事物区分开来的特征,这些具有区分作用的特征又称本质特征。因此抽取事物的共同特征就是抽取事物的本质特征,舍弃不同特征。所以抽象的过程也是一个裁剪的过程,不同的、非本质性的特征全部裁剪掉了。

     所谓的共同特征,是相对的,是指从某一个方面看是共同的。比如,对于汽车和大米,从买卖的角度看都是商品,都有价格,这是他们的共同的特征,而从其他方面来比较是,他们则是不同的。所以在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。 

      从编程角度上来讲,是用OOP语言对抽象进行描述,以达到可以让计算机识别并在计算机上稳定运行的应用的目的。当然,抽象要从具体的需求中来。    在软件开发过程中,识别稳定的需求、识别核心的需求、识别概念性的需求、设计系统的架构、定义系统中构件之间的接口关系等等都是抽象的过程,都是反应系统的本质特征的过程。 抽象的,才是稳定的,才是永恒的。

      抽象的反义词是具体。人们往往会说:“你讲的太抽象了,能不能讲的具体一点?”在开发语言中,有抽象类,有具体类,具体类可以继承自抽象类,可以实例化。抽象类可以派生出众多的不同的具体类。系统的稳定体现在抽象类,系统的变化体现在具体类。抽象类的层次要高于具体类。因此,我们可以说系统因抽象而稳定,因抽象而生动。

 

      2)封装(Encapsulation)

      在OOP技术中,封装就是将不允许在外部访问或者外部不关心的内容隐藏起来,只暴露(公开)允许在外部访问的内容

 

      3)模块化(Modularity)

      模块化是将项目按功能分成几个部分,各部分之间使用各自公开的接口进行通讯,另外要求高内聚、低耦合,模块间的依赖越小越好。

 

      4)分层(Hierarchy) 

      “分而治之”。分层是软件设计中非常重要的思想,特别是开发大的软件系统。分而治之是计算机中经常采用的一种方法。比如TCP/IP七层协议就是典型的分层应用。任何一个合格的软件开发者都必须掌握的分层思想。

      .NET中有“三层架构”的概念,所谓三层是指:表现层、业务逻辑层和数据访问层。表现层就是用户界面,如WEB窗体或Windows窗体,用于显示信息,处理用户的请求。业务逻辑层是系统的核心应用部分,用来实现实际的业务活动。数据层是对数据(数据库中的表或其他文本形式的数据源)进行操作的层。完善的三层结构的要求是:修改表现层而不用修改逻辑层,修改逻辑层而不用修改数据层。 

 

  面向对象的三大要素

  1)封装(Encapsulation)

  2)继承(Inherits)

      有个词叫做“子承父业”,简单的说就是儿子继承了父亲的事业,那么,以此类推儿子的儿子也可以“子承父业”,儿子继承父亲的事业后,可以对事业进行进一步的发展,所以儿子的儿子继承的会是父亲和爷爷的事业的和。在C#中,继承也包含这样的一层意思。继承是指这样一种能力:它可以使用现有父类的所有功能,并在无需重新编写父类的情况下对这些功能进行扩展。  

  3)多态(Polymorphism)

 

      Polymorphism(多态性)是一个希腊词,指“多种形态”。在C#中,可以这样来理解,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。多态性通过派生类覆写基类中的虚函数型方法来实现。

      多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。

      编译时的多态性:编译时的多态性是通过重载(overload)来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

      运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过重写(override)虚成员实现。

 


3、 类及类成员

 

      类是C#中功能最为强大的一种类型,是一种构造,用于在程序中描述现实中的事物及相互之间的关系,类就像一个蓝图,它定义类型的数据和行为:

      定义类语法:

[访问修饰符] [staticclass  类名
{
     
//类的主体
}

 

       定义类示例:

/// <summary>
/// 创建汽车类
/// </summary>
public class Car
{
    
//对汽车属性和行为的描述
    string FaceColor = null;
}
 
/// <summary>
/// 创建动物类
/// </summary>
public class Animal
{
    
//对动物属性和行为的描述
}

 

      以上代码的意思相当于说:创建公共(public)类(class) 小汽车(Car),创建公共(public)类(class) 动物(Animal);“class”表示创建的是类对象,创建类时总是要使用“class”关键字,而且必须出现在这个位置。

      使用类:

      实例化类:类名 类的实例名 = new 类名();

      访问类成员:类的实例名.成员名;

      //以下将Car类和Animal类实例化

Car instanceCar = new Car();
Animal instanceAnimal = new Animal();

//访问类成员
instanceCar.FaceColor= “红色”;
Console.WriteLine(“这辆车的颜色是:{0}”,instanceCar.FaceColor);

 

      静态类:

[访问修饰符] static class  类名
{
     
//静态成员
}

 

     static关键字是关键。 

 /// <summary>

/// 创建汽车类
/// </summary>
public static class StaticCar
{
    
//对汽车属性和行为的描述
    public static string FaceColor = null;
}

 

       静态类特征:

       1)静态类不能被实例化

       2)直接用“类名.成员名”访问类静态成员

 

4、访问修饰符

 

      你看到上面定义类时使用了一个关键字“public”,这个是访问修饰符,访问修饰符限定了类(对象)可以被访问的范围。

      public 

             同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。公共访问是允许的最高访问级别。对访问公共成员没有限制。

      private 

      只有同一类或结构中的代码可以访问该类型或成员。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的。

      protected 

      只有同一类或结构或者派生类中的代码可以访问该类型或成员。受保护成员在其所在的类中可由派生类实例访问。只有在通过派生类类型发生访问时,基类的受保护成员在派生类中才是可访问的。

      internal 

      同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。

      protected internal 

      同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。 

 

     注意: 

     一个成员或类型只能有一个访问修饰符,但使用 protected internal 组合时除外。

     命名空间上不允许使用访问修饰符。命名空间没有访问限制。

     下一篇介绍类成员。 

 

posted on 2010-11-08 10:47  Ferry  阅读(621)  评论(0编辑  收藏  举报

导航