C#程序设计基础课件第6章(朱晓辉)_第1页
C#程序设计基础课件第6章(朱晓辉)_第2页
C#程序设计基础课件第6章(朱晓辉)_第3页
C#程序设计基础课件第6章(朱晓辉)_第4页
C#程序设计基础课件第6章(朱晓辉)_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C#程序设计基础目录第一章 .NET与C# 第二章 第一个C#程序第三章 变量与表达式第四章 流程控制语句第五章 数组与集合第六章 面向对象编程基础第七章 高级面向对象技术第八章 C#高级技术第九章 文件第十章 Windows编程基础2第六章 面向对象编程基础6.1 面向对象概述6.2 类的定义6.3 访问修饰符6.4 构造函数与析构函数6.5 字段、属性与索引器6.6 方法6.7 重载6.8 静态成员6.9 分部类6.10 命名空间6.11 自定义类库36.1 面向对象概述6.1.1 对象6.1.2 面向对象程序设计6.1.3 面向对象程序设计三大特性4“对象”是面向对象程序的主要组成部分

2、在面向对象程序设计中,把一个具有完整功能的程序看做是一个需要实现的最大的“对象”,而这个最大的对象又由不同的对象通过一定方式组合而成,不同的对象分别实现程序中不同的子功能,当这些具有不同子功能的对象经过一定的方式组合在一起并协调工作时就形成了一个功能完善的应用程序。对象的概念 世界中的任何一个物理实体看做一个对象,而这个对象一定是由很多不同的子对象构成。56.1.1 6.1.1 对象对象结构化程序设计 又称为面向过程的程序设计 程序=数据结构+算法面向对象程序设计 采用数据抽象和信息隐藏技术 抽象成一种新的数据类型“类” 面向对象程序=对象+对象+对象 对象=算法+数据结构66.1.2 6.1

3、.2 面向对象程序设计面向对象程序设计封装 把数据和方法封装为一个独立的整体 公开对象外部特性,隐藏对象内部特性 封装的目的在于把对象的设计者和对象者的使用分开,使用者不必了解对象的内部实现细节,只须调用设计者提供的公开接口来访问和使用该对象继承 派生类自动共享基类中数据和方法 继承提高了代码可重用性 促进系统的可扩充性76.1.3 6.1.3 面向对象程序设计三大特性面向对象程序设计三大特性多态 多态是指同一方法作用于不同的对象可以有不同的解释,产生不同的执行结果,它是对类的功能和行为的再抽象。其包括两部分内容:重载和重写 重载 类内部多态性的体现 描述类内部自身特定成员方法之间的关系 类中

4、具有相似功能的不同方法用同一个方法名称来实现 重写 基类与派生类间多态性的体现 派生类中重新定义新的方法覆盖基类中的方法86.1.3 6.1.3 面向对象程序设计三大特性面向对象程序设计三大特性6.2 类的定义9什么是类 类是对现实世界中具有相似功能的同类实体的抽象 类是一种自定义的数据类型 用“new”关键字从某个类实例化对象106.2 6.2 类的定义类的定义基本语法访问修饰符 class 类名 /类成员 其中: 访问修饰符:可选,表示该类的可访问性范围。 class:定义类的关键字 类名:类的名称,一般用Pascal命名法来定义类的名称。【例6-1】类的定义示例116.2 6.2 类的定

5、义类的定义6.3 访问修饰符6.3.1 概述6.3.2 可访问性级别12访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性成员指的是类定义中的字段、属性、方法、构造函数、析构函数等所有的类成员四个访问修饰符,五个可访问性级别 public protected internal protected internal private136.3.1 6.3.1 概述概述6.3.2 6.3.2 可访问性级别可访问性级别可访问性级别可访问性级别含义含义public访问不受限制,同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员protected只有同一类、结构体或者派生类

6、中的代码可以访问该类型或成员internal同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以Protected internal同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员private只有同一类或结构体中的代码可以访问该类型或成员表6-1 可访问性级别146.3.2 6.3.2 可访问性级别可访问性级别( (续续) )15顶级类型的访问修饰符只能是internal或public顶级类型的默认访问修饰符是internal嵌套类型默认访问修饰符和允许的访问修饰符各不相同6.3.2 6.3.2 可访问性级别可访问性级别( (续续) )16嵌套类型嵌

7、套类型内部成员默认访问修饰符内部成员默认访问修饰符内部成员允许的访问修饰符内部成员允许的访问修饰符enumpublic无structprivatepublicinternalprivateclassprivatepublicprotectedinternalprotected internal privateinterfacepublic无表6-2嵌套类型成员访问修饰符6.4 构造函数和析构函数6.4.1 构造函数6.4.2 析构函数176.4.1 6.4.1 构造函数构造函数18构造函数定义构造函数是一种特殊的方法,一般用于实例化对象时对数据成员进行初始化语法结构访问修饰符 构造函数名 (

8、参数列表 ) /语句块 其中: 访问修饰符:可选,默认为private,一般都用public 构造函数名:名称必须与类名完全相同,且无返回值也不能加“void”关键字 参数列表:可选,在构造函数中可以有参数,也可以没有参数6.4.1 6.4.1 构造函数构造函数( (续续) )19类中可以没有构造函数,也可以由用户自定义构造函数。当类中没有显式定义构造函数时,系统将自动创建一个不带参数列表的默认的构造函数,并根据对象中数据成员的类型用相应默认值对其初始化。当在类中显式定义了构造函数后,默认的构造函数将不再存在。构造函数的调用在实例化对象时,构造函数将通过new语句被自动调用调用构造函数时所使用

9、的参数类型和个数必须与定义构造函数时的参数类型和个数相一致例6-2不带参数构造函数示例例6-3带参数构造函数示例6.4.1 6.4.1 构造函数构造函数( (续续) )206.4.2 6.4.2 析构函数析构函数21析构函数定义析构函数也是一种特殊的方法,一般主要用于在销毁对象时释放该对象所占用的非托管资源由系统自动调用语法结构析构函数名 ( ) /语句块 其中: 析构函数名:析构函数名称必须与类名完全相同,同时在其前面加“”号。析构函数无返回值,无参数列表,无访问修饰符。6.4.2 6.4.2 析构函数析构函数( (续续) )22析构函数的使用析构函数在程序中不能显式调用,它是由系统在对象销

10、毁时自动调用的。析构函数的不足 析构函数会延迟对象最终从内存中删除的时间 无法控制和确定析构函数被调用的时间 可以通过System.Disposable 接口来替代析构函数释放资源【例6-4】析构函数示例6.5 字段、属性与索引器6.5.1 字段6.5.2 属性6.5.3 索引器23字段定义类中的字段可以是任何类型的变量,包括简单类型和引用类型,可以用标准的变量声明格式和访问修饰符来定义。语法结构 访问修饰符 其它修饰符 数据类型 变量名列表; 其中: 访问修饰符:可选,默认为private。类中的字段属于嵌套类型的内部成员,因此其可用的访问修饰符如6.3节中表6-2所示 其它修饰符:可选,常

11、用的有:const、static、readonly等。 数据类型:变量的类型,可以是简单类型或引用类型。 变量名列表:变量的名称,一次可以定义一个或多个变量。6.5.1 6.5.1 字段字段24实例字段在类的字段定义中,不加“static”关键字修饰的字段称为实例字段实例字段特定于类的实例,从同一个类创建的若干个实例对象各自拥有自己的实例字段对某个实例对象中的实例字段修改时,不影响其它实例对象中的实例字段。【例6-5】实例字段示例6.5.1 6.5.1 字段字段( (续续) )25静态字段在类的字段定义中,加“static”关键字修饰的字段称为静态字段,也称为类字段静态字段属于类本身,在该类的

12、所有实例中共享通过“类名.静态字段名”来访问该静态字段对某个实例对象中静态字段值进行修改时,将同时影响其它实例对象中的静态字段值【例6-6】静态字段示例6.5.1 6.5.1 字段字段( (续续) )26常量字段在类的定义中,加“const”关键字修饰的字段称为常量字段常量字段的值在编译时已知,并在生存期内不能更改只读字段在类的定义中,加“readonly”关键字修饰的字段称为只读字段。对只读字段的初始化可以在声明时进行,也可以在类的构造函数中进行,其它情况下只读字段只能读不能写。6.5.1 6.5.1 字段字段( (续续) )27类的常量字段与只读字段的区别常量字段只能在声明时初始化只读字段

13、可以在声明或构造函数中初始化不同实例对象中的只读字段可能具有不同的值不同实例对象中的常量字段具有相同的值对常量字段的访问通过“类名.常量字段名”,不能通过对象来访问对只读字段的访问通过“对象名.只读字段名”,不能通过类名来访问【例6-7】常量字段与只读字段示例6.5.1 6.5.1 字段字段( (续续) )28属性通过属性实现对私有字段的存取,实现了数据的隐藏语法结构访问修饰符其它修饰符 数据类型 属性名get/读访问器 set/写访问器 6.5.2 6.5.2 属性属性29 其中 访问修饰符:默认为private。属性的访问修饰符一般为public 其它修饰符:可选,例如static等 数据

14、类型:可以为简单类型,也可以为引用类型,表示get属性访问器的返回值类型 get:get访问器,也称为读访问器,用于返回属性值,其返回值类型和属性的类型相同 set:set访问器,也称为写访问器,用于为属性分配新值。set访问器没有返回值,但它有一个隐式的名为value的参数,其类型与属性类型相同 属性名:属性的名称,外部代码可以通过属性名来调用get访问器和set访问器。属性只有get访问器时称为只读属性,只有set访问器时称为只写属性,当两个都有称为读写访问器【例6-8】属性示例6.5.2 6.5.2 属性属性( (续续) )30自动实现的属性属性的get和set访问器不需要实现其他代码逻

15、辑同时有get和set两个访问器,且访问器无任何代码系统自动创建私有的匿名支持字段来保存属性值语法结构访问修饰符 数据类型 属性名get;/读访问器 set;/写访问器【例6-9】自动属性示例6.5.2 6.5.2 属性属性( (续续) )31索引器作用允许对类中的字段像数组一样进行索引通过索引方式方便访问类中集合或数组字段语法结构访问修饰符 返回值类型 this 数据类型 索引参数名 get set其中6.5.3 6.5.3 索引器索引器32其中 访问修饰符:可选,默认为private,一般为public。 this:索引器名称,用this关键字指定。 数据类型:索引的数据类型,一般为整型,

16、但也可以为string等其他类型 索引参数名:索引参数的名称。 get:get访问器,类似于属性中的get访问器,但带有index参数 set:set访问器,类似于属性中的set访问器,但带有index参数注意 索引器可以有多个索引参数,如对类中的二维数组定义索引器时就需要两个索引参数 一个类中可定义多个索引器实现对类中多个字段进行索引【例6-10】索引器示例6.5.3 6.5.3 索引器索引器( (续续) )336.6 方法6.6.1 方法声明6.6.2 方法参数346.6.1 6.6.1 方法声明方法声明35什么是方法“方法”是包含一系列语句的代码块每条语句代码都是在方法的上下文中执行的语

17、法结构访问修饰符其他修饰符 数据类型 方法名(参数列表)/方法体其中修饰符修饰符含义含义public该方法可以任何地方不受限制的被访问。protected该方法可以在类内部或派生类的代码中访问internal该方法可以在同一程序集中被访问Protected internal该方法可以在同一程序集或其他程序集的派生类中被访问private该方法只能在类内部被访问static该方法是静态方法abstract该方法是一个抽象方法。virtual该方法是虚方法,可以在派生类中重写extern该方法是一个外部方法override该方法是对基类中所继承的virtual方法的新实现new该方法隐藏基类中的同

18、名方法sealed该方法是密封方法,不能在子类中重写该方法6.6.1 6.6.1 方法声明方法声明( (续续) )36其中 访问修饰符:可选,默认为private 其他修饰符:可选,如static、virtual、override等 数据类型:方法的返回值类型,可以是简单类型、引用类型或“void”类型 方法名:按标识符的命名规则设置的方法名称,同时方法名不能和C#中的关键字同名 参数列表:可选,由零个或多个用逗号分割的参数组成,参数类型可以是简单类型也可以是引用类型 方法体:用括起来的语句块。【例6-11】方法示例6.6.2 6.6.2 方法参数方法参数37值类型形参不加任何修饰符的形参就是

19、值类型形参方法调用时,系统为值类型形参单独创建存储空间,并把实参的值复制给形参方法内发生的对形参的更改对实参中存储的原始数据无任何影响【例6-12】简单类型的值类型形参示例【例6-13】引用类型的值类型形参示例6.6.2 6.6.2 方法参数方法参数( (续续) )38ref类型形参加修饰符ref的形参就是ref类型形参ref类型参数要求在使用前必须进行初始化ref类型的形参在方法调用时并不创建新的存储单元,而是与实参共用一个存储单元方法内对形参的更改实际上就是对实参的更改【例6-14】ref类型参数示例“ref类型”与“引用类型”的区别值类型和引用类型参数都可用 ref 进行修饰【例6-15

20、】ref引用类型参数示例6.6.2 6.6.2 方法参数方法参数( (续续) )39out类型形参加修饰符out的形参就是out类型形参当希望方法同时返回多个值时,可以通过为方法声明多个out类型形参来实现out类型参数在使用前无需进行初始化,但在方法中必须对out类型的参数进行赋值【例6-16】out类型参数示例6.6.2 6.6.2 方法参数方法参数( (续续) )40params类型形参加修饰符params的形参就是params类型形参params类型参数可以给方法传递0个或任意多个参数params类型形参必须是方法中最后一个形参,并且一个方法中只允许一个params类型的形参【例6-1

21、7】params类型参数示例6.6.2 6.6.2 方法参数方法参数( (续续) )41命名参数命名参数可将实参与形参的名称关联,从而在方法调用时可以按任意顺序把实参传递给形参命名参数可以用在方法中也可以用在索引器、构造函数和委托中 【例6-18】命名参数示例6.6.2 6.6.2 方法参数方法参数( (续续) )42可选参数为形参指定默认值的参数就是可选参数方法声明中每个可选参数都必须指定默认值 可选参数的默认值必须是一个常数表达式方法定义中跟在可选参数后的每个参数也都必须是可选的,即可选参数必须放在参数列表的后面方法调用时,为可选形参中任意一个提供了实参,则它必须为前面的所有可选形参提供实

22、参【例6-19】可选参数示例6.7 重载6.7.1 签名6.7.2 方法重载6.7.3 构造函数重载6.7.4 索引器重载6.7.5 运算符重载436.7.1 6.7.1 签名签名44签名签名是对类、结构和接口中的成员实施重载的一个重要机制方法的签名由方法名称、形参的类型和种类(值类型参数、ref类型参数、out类型参数或params类型参数)组成,但不包含返回值类型索引器的签名由它的每一个形参的类型组成,但不包含元素类型运算符的签名由运算符的名称和它的每一个形参的类型组成,但不包含结果类型6.7.2 6.7.2 方法重载方法重载45方法重载定义类或结构体中声明多个名称相同但签名不同的方法两个

23、方法的名称、参数类型和参数个数都相同但返回值类型或访问修饰符不同,不能构成方法的重载两个方法名称相同,参数类型和个数都相同,仅ref修饰符和out修饰符的顺序不同,也不能构成方法的重载【例6-20】类的方法重载示例【例6-21】结构体的方法重载示例6.7.3 6.7.3 构造函数重载构造函数重载46构造函数重载定义类或结构体中声明多个名称相同但签名不同的构造函数两个构造函数的参数类型和参数个数都相同但访问修饰符不同,不能构成构造函数的重载两个构造函数的参数类型和个数都相同,仅ref修饰符和out修饰符的顺序不同,不能构成构造函数的重载【例6-22】类的构造函数重载示例【例6-23】结构体的构造

24、函数重载示例6.7.4 6.7.4 索引器重载索引器重载47索引器重载定义类或结构体中声明多个名称相同但签名不同的索引器索引器的参数类型和参数个数都相同但返回值类型不同,不能构成索引器的重载索引器的访问修饰符不同,不能构成索引器的重载【例6-24】类的索引器重载示例6.7.5 6.7.5 运算符重载运算符重载48运算符重载定义对现有运算符的功能进行重载,赋予其新的运算逻辑和功能,使之可以对新的数据类型进行运算对用户自定义数据类型(包括类和结构体)的运算就像对基本数据类型的运算一样自然、简单语法结构 public static 返回值类型 operator 运算符(参数列表) /程序代码 6.7

25、.5 6.7.5 运算符重载运算符重载( (续续) )49 其中 public:访问修饰符,运算符重载必须申明为public。 static:运算符重载必须申明为static。 返回值类型:表示运算符重载方法的返回值类型。 operator:关键字,表示运算符重载。 运算符:要重载的运算符,详见表6-4。 参数列表:要进行运算的参数,若运算符是一元运算则只有一个参数,若是二元运算则是两个参数。6.7.5 6.7.5 运算符重载运算符重载( (续续) )表6-4 可重载的运算符50类别类别运算符运算符一元运算符+、 -、 !、 、 +、 -、 true 和 false二元运算符+、 -、 *、

26、/、 %、 &、 |、 、 、= =、 !=、 、=、【例6-25】运算符重载示例6.8 静态成员6.8.1 静态字段6.8.2 静态属性6.8.3 静态构造函数6.8.4 静态方法6.8.5 静态类516.8.1 6.8.1 静态字段静态字段52带有static关键字的字段称为静态字段6.8.2 6.8.2 静态属性静态属性53类(或结构体)的属性前加static修饰符的属性称为静态属性静态属性不能访问类中的实例字段6.8.3 6.8.3 静态构造函数静态构造函数54静态构造函数的定义有static修饰符的构造函数称为静态构造函数静态构造函数的作用一般用于初始化类中的静态字段,或用于执行仅需执行一次的特定操作静态构造函数的特点既没有访问修饰符,也没有参数只能存取类中的静态字段在创建类的第一个实例或引用任何静态成员之前,将自动调用静态构造函数【例6-26】静态构造函数示例6.8.4 6.8.4 静态方法静态方法55静态方法的定义方法名前加static修饰符的方法称为静态方法静态方法的特点类的静态方法中只能访问方法内部的局部变量和类的静态字段,不能访问类的实例字段对静态方法的访问必须通过类名来实现【例6-27

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论