《C#面向对象基础.ppt》由会员分享,可在线阅读,更多相关《C#面向对象基础.ppt(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、融智技术学院融智技术学院第3章 C#面向对象基础面向对象编程的英文简称是OOP(Object Oriented Programming),该项技术是目前运用最广泛的程序化设计方法,几乎已经完全取代了过去的面向过程编程。C#从一诞生开始,就是为面向对象编程所准备的。类是面向对象编程的核心部件,它描述了一组具有相同特性和行为的对象。基于面向对象的应用程序,就是由几个或几十个甚至更多的类组成,且类之间总是保持着或多或少的关系。融智技术学院融智技术学院3.1 类的基本概念在C#中,类可以看成是一种数据结构,它自身封装了数据成员和函数成员等。其中数据成员包括字段、常量和域等,而函数成员主要包括方法、属性
2、、事件、索引器和操作符等。本节将对类的结构和用法进行详细说明。融智技术学院融智技术学院3.1.1 C#中的类定义在C#中,用class关键字来定义类,基本结构如下所示。融智技术学院融智技术学院3.1.2 字段字段实际上相当于类的变量,它在类中的应用十分广泛,看一个简单的例子,如下面代码所示。融智技术学院融智技术学院3.1.3 常量常量在类中所处的地位和字段差不多,只是它不可变而已。通常,定义常量用关键字const,如下面代码所示。public const int age=25;融智技术学院融智技术学院3.1.4 域域的声名过程和字段比较相似,但它们之间有一个很重要的区别,即域只能声明在类的内部
3、,而不能声名在类的方法的内部。域分为实例域和静态域,实例域只能通过类的实例进行调用,而静态域可以直接通过类名进行调用。融智技术学院融智技术学院3.1.5 类的方法在C#中,方法的定义与其他语言一样,包括三个部分,分别为访问修饰符、输入参数和返回类型。方法的访问修饰符的类型和类的差不多,如下表所示。融智技术学院融智技术学院3.1.6 类的属性类的属性提供比较灵活的机制来读取、编写或计算私有字段的值,可以像使用公有数据成员一样使用属性。属性必须要由访问器进行读写,它的一般声明格式如下所示。融智技术学院融智技术学院3.1.7 类的索引器索引器是C#所特有的类成员,它的主要作用是对象能向数组一样被方便
4、地引用。索引器的声明与属性的声明比较类似,如下所示。融智技术学院融智技术学院3.1.7 类的索引器索引器具有以下特点。(1)索引器没有具体的名字,需要用this关键字对对象进行索引。this关键字指向被访问成员所在的当前实例,可以在构造函数和实例方法中实现对成员的访问,但不能访问静态成员。(2)索引器不能定义为静态的。(3)索引器的参数index只能是传值类型,不能出现ref和out关键字。融智技术学院融智技术学院3.1.8 类的构造函数和析构函数类的构造函数能被编译器自动执行,它具有以下特点。(1)构造函数必须与类同名。(2)构造函数不能有返回类型。(3)当访问一个类时,它的构造函数最先被执
5、行。(4)一个类可以有多个构造函数,如果没有定义构造函数,系统会自动生成一个默认的构造函数。融智技术学院融智技术学院3.1.9 事件事件相关知识的内容太多,在本章的后面部分将用单独一节进行讲解。融智技术学院融智技术学院3.2 Visual Studio中的类向导在VS2010中,提供了创建类和类的成员的快捷方式,在本节中将通过例子进行详细说明。图 程序运行结果融智技术学院融智技术学院3.3 事件和委托事件是C#中的又一个重要概念,它的定义如下所示。在发生其他类或对象需要关注的事情时,本类或对象可以通过事件来通知它们。发送事件的类称为事件的发送者,而接收事件的类称为事件的订阅户。融智技术学院融智
6、技术学院3.3.1 委托委托是事件应用过程中必不可少的一个环节,委托首先是在Visual J+中提出的,后来被C#引用。如果一个类需要调用另一个类的方法,可以有三种方式,即实例方式、静态方式和委托方式。应用委托调用方法的流程如图所示。图 委托使用流程图融智技术学院融智技术学院3.3.2 委托的事件处理程序前面提到,事件需要订阅者,当事件发生时,订阅者会给出相应的事件处理程序。事件处理程序本身是简单的函数形式,它的参数和返回类型必须和调用它的委托相匹配。委托在这里的作用是包含事件处理程序,当事件被触发时,通过委托来执行事件处理程序。融智技术学院融智技术学院3.3.3 委托中的GUI事件总的来说,
7、事件具有以下特点。(1)事件的发送者决定何时发送事件,事件的订阅者决定执行何种操作来响应事件。(2)一个事件可以同时有多个订阅者,一个订阅者可以响应多个事件。(3)没有订阅者的事件不会被调用。(4)具有多个订阅者的事件被触发时,会同步调用多个事件处理程序。(5)在.NET Framework中,事件是基于EventHandler委托和EventArgs基类的。融智技术学院融智技术学院3.4 面向对象的特征面向对象主要具有三大特征,即继承、多态和封装。正因为这些机制的存在,才使得应用程序变得更为简单和丰富多彩。本节将对以上三个特征进行详细介绍,此外还会提到面向对象中另一个重要知识点重载。融智技术
8、学院融智技术学院3.4.1 继承继承是指一个类A能利用另一个类B的资源(包括属性和方法等),其中B类被称为基类(或父类),而A类被称为派生类(或子类)。继承的使用语法如下所示。(1)大多数而并非所有类都可以作为基类被继承,比如带有sealed修饰符的密封类不能被继承。(2)基类中只有两种成员能被派生类访问,包括public和protected类型的成员。其中,protected类型是专为派生类设计的,该类型的成员只能在派生类中进行访问。(3)在派生类中可以修改基类中的以下成员,包括虚拟成员(virtual)和抽象成员(abstract)。其中对虚拟成员的修改是在派生类中重写该成员的执行代码;而
9、对于抽象成员而言,它在基类中,没有执行代码,需要在派生类中进行添加。融智技术学院融智技术学院3.4.2 多态多态是面向对象的又一个重要特征,它主要是指同一操作(如方法)作用于不同的类的实例,将产生不同的结果。多态主要是通过在派生类中对基类中的成员进行替换或重定义完成。融智技术学院融智技术学院3.4.3 封装封装是指将对象的信息进行隐藏,而只是提供一个访问接口,使它的使用者无法看到对象的具体信息。在类中,通过不同的修饰符能让类的成员实现公开或隐藏。通过这些修饰符,类实现了很好的封装。融智技术学院融智技术学院3.4.4 重载重载是面向对象中除三大特征外的又一个重要知识点,它是指在类中同名成员的不同
10、定义。它的主要作用是使程序逻辑更加清晰。重载主要包括方法重载和运算符重载,本节将通过例子对这两者进行详细介绍。融智技术学院融智技术学院3.4.5 方法重载方法重载是C#中运用最广泛的一种重载方式,它是指在类中建立名称相同但参数不同的方法。方法重载主要是为了解决操作同一类对象需要使用不同方法的问题,如计算一类图形的面积。图形中包括矩形、圆和椭圆,它们的面积计算公式是不同的,这里就需要用到重载的概念。融智技术学院融智技术学院3.4.6 运算符重载运算符重载主要是为了在类中扩展运算符的功能,以完成一些特殊的操作。重载运算符需要用到operator关键字。在运算符重载的使用过程中,应注意以下情况。(1
11、)并非所有运算符都能被重载,不能被重载的运算符包括“=”、“?:”、“-”、“new”、“is”、“sizeof”和“typeof”。(2)重载运算符不能改变原来运算符的优先级和操作数。(3)比较运算符必须成对重载,如“=”和“!=”,“”和“”等。(4)重载运算符可由派生类继承。融智技术学院融智技术学院3.5 接口接口是面向对象中的又一个重要概念,它用于定义类或结构的行为特征。接口包含事件、方法、属性和索引器4种成员,它只包含这些成员的签名而不包含实现,这一点和抽象类比较相似;而且接口不能包含字段,且它的所有成员都必须是公开的。融智技术学院融智技术学院3.5.1 接口的声明接口的声明需要采用
12、interface关键字,如下所示。融智技术学院融智技术学院3.5.2 接口的使用前面提到,接口只能包含成员的签名,不能包含成员的实现。接口成员必须要在继承该接口中的类中才能实现。上面代码中,实现了接口MyInterface中的MyMethod()方法并完成输出。在使用接口时,应注意以下问题。(1)接口自身不能被实例化,需要在继承它的类中才能使用。(2)接口不能包含字段。(3)接口不能包含静态成员。(4)接口成员默认是public类型的,不能在接口成员前面加任何修饰符。(5)类和结构可以从多个接口继承。(6)接口本身也可以从其他接口继承,它的继承机制和类的继承机制一样。融智技术学院融智技术学院
13、3.6 面向对象的其他主题本章前面部分以类为重点介绍了面向对象的相关知识,但仅有类是不够的,面向对象还有一些其他主题,比如命名空间等。在本节中,将对面向对象中其他一些主题进行介绍,以帮助读者更好地理解面向对象的本质。融智技术学院融智技术学院3.6.1 命名空间在.NET Framework中,一个命名空间就是一个逻辑的命名系统,它用于指定一个范围,并在该范围组织代码(包括类、接口、结构体和枚举等)。命名空间在前面的代码中已经多次用到,如果需要使用包含在命名空间中的类,则需要使用using指令包含该命名空间,如下所示。融智技术学院融智技术学院3.6.2 程序集程序集是.NET Framework
14、应用程序的基本构造块,当生成C#应用程序时,VS会在当前工程的Debug目录下生成可移植可执行的文件,通常是.exe或.dll文件。在较大的项目中,程序集的作用是十分明显的。项目经理可以把项目划分成几个单独的模块,由不同的人员进行开发,然各自生成程序集,最后通过一定的方式将这些程序集组合起来即可。程序集具有以下特点。(1)程序集以.exe或.dll格式的文件存在。(2)能在多个应用程序之间实现程序集的共享。(3)在单个应用程序中可以使用程序集的两个版本。融智技术学院融智技术学院3.6.3 类库在.NET Framework中,类库是由命名空间组成,同时又是类、接口和值类型组成的库,这些库能对系
15、统功能进行访问,是建立.NET Framework应用程序、组件和控件的基础。.NET Framework中包含了大量的系统类库供用户使用,调用这些类库时,系统会自动添加,只需用using指令包含类库提供的命名空间即可,比如前面经常使用的System命名空间。但系统提供的类库有时候并不能完全满足用户的要求,此时就需要自定义类库。下面通过例子说明类库的编写和调用。融智技术学院融智技术学院3.7 小结本章主要介绍了面向对象技术的基本内容。首先是类的相关知识的介绍,类是面向对象技术中最基础也是最重要的内容,本章分别从类的定义、类的访问权限和类的成员等方面对类的用法进行了说明。其中采用public、private、protected和abstract等修饰符设置了类的不同访问权限;类的成员包括常量、字段、属性、索引器、方法和事件等,本章通过例子对以上成员进行了详细的说明。接下来介绍了面向对象的三大特征继承、多态和封装,它们是面向对象技术的核心部分。在有关接口的内容中简单介绍了接口的声明和使用。最后一部分面向对象技术中的其他一些主题,包括命名空间、程序集和类库等。
限制150内