第4章面向对象编程基础.ppt
《第4章面向对象编程基础.ppt》由会员分享,可在线阅读,更多相关《第4章面向对象编程基础.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章面向对象编程基础2Ch4Ch4面向对象面向对象编程基础编程基础4.1 类和对象类和对象4.2 方法方法4.3 属性和事件属性和事件4.4 WPF应用程序中的属性和事件应用程序中的属性和事件4.5 结结 构构4.6 常用类和结构的基本用法常用类和结构的基本用法4.1 4.1 类和对象类和对象4.1.1 类的定义和成员组织类的定义和成员组织4.1.2 访问修饰符访问修饰符4.1.3 字段和局部变量字段和局部变量4.1.4 构造函数构造函数4.1.5 析构函数和自动内存管理析构函数和自动内存管理4.1.6 new关键字和关键字和this关键字关键字4.1.7 static关键字关键字44.1.
2、1 4.1.1 类的定义和成员组织类的定义和成员组织1、自定义类自定义类定义定义对象具有的特征(字段、属性等)和可执行的操作(方法、事对象具有的特征(字段、属性等)和可执行的操作(方法、事件等)件等)。自定义自定义类的常用类的常用形式形式:访问修饰符访问修饰符 static class 类名类名:基类基类,接口序列,接口序列 类成员类成员2、类类的的成员成员包括包括:字段字段、属性、构造函数、方法、事件、运算符、索引器、析、属性、构造函数、方法、事件、运算符、索引器、析构函数等。构函数等。54.1.1 4.1.1 类的定义和成员组织类的定义和成员组织【例【例4-1】演示类的基本构造,运行效果如
3、图演示类的基本构造,运行效果如图4-1所示。所示。64.1.2 4.1.2 访问修饰符访问修饰符1、基本的访问修饰符、基本的访问修饰符 类类和类的成员都可以使用下面的访问修饰符。和类的成员都可以使用下面的访问修饰符。public:内部内部和外部代码都可以访问。和外部代码都可以访问。private :内部内部可访问可访问,外部,外部无法访问无法访问。类。类成员的访问成员的访问修饰符默认修饰符默认为为private。protected:类的内部类的内部或者从该类继承的子类可以访问。或者从该类继承的子类可以访问。internal:同一个程序集中的代码都可以访问,程序集外的其他代同一个程序集中的代码都
4、可以访问,程序集外的其他代码无法访问。类的访问修饰符默认为码无法访问。类的访问修饰符默认为internal。protected internal :从从该类继承的子类或者从另一个程序集该类继承的子类或者从另一个程序集中继中继承承的类都可以访问。的类都可以访问。72、partial修饰符修饰符:包含包含partial修饰符的类称为分部类修饰符的类称为分部类。可将可将同一个同一个类定义在类定义在多个文件中,编译器编译带有多个文件中,编译器编译带有partial修饰符修饰符的类时,会自动将这些文件合并在一起的类时,会自动将这些文件合并在一起。利用它可利用它可隔离隔离系统系统自动自动生成的代码生成的代
5、码和和程序员自己编写程序员自己编写的代码的代码。4.1.2 4.1.2 访问修饰符访问修饰符84.1.3 4.1.3 字段和局部变量字段和局部变量要点:要点:字段字段是类的成员,局部变量是块的成员。是类的成员,局部变量是块的成员。1字段字段字段是指在类或结构中声明的字段是指在类或结构中声明的“类级别类级别”的变量。或者说,字段是整个类的变量。或者说,字段是整个类内部的所有方法和事件中都可以访问的变量。内部的所有方法和事件中都可以访问的变量。2只读字段(只读字段(readonly)readonly关键字用于声明可以在程序运行期间只能初始化关键字用于声明可以在程序运行期间只能初始化“一次一次”的字
6、的字段。初始化的方法有两种,一种是在声明语句中初始化该字段,另一种是段。初始化的方法有两种,一种是在声明语句中初始化该字段,另一种是在构造函数中初始化该字段。在构造函数中初始化该字段。3局部变量局部变量局部变量是相对于字段来说的。可以将局部变量理解为局部变量是相对于字段来说的。可以将局部变量理解为“块块”级别的级别的变量变量。93.1.3 3.1.3 静态成员和实例成员静态成员和实例成员要点:(要点:(1)通过通过“类名类名.成员名成员名”调用调用类的类的静态成员静态成员。(2)通过)通过“实例名实例名.成员名成员名”调用调用类的类的实例实例成员。成员。1.static关键字关键字用用stat
7、ic声明的类或成员,声明的类或成员,表示加载表示加载到内存到内存中中的类的类或成员或成员只有只有一份,而一份,而不是不是加载类的加载类的实例实例。当垃圾回收器检测到不再使用该。当垃圾回收器检测到不再使用该静态静态类或静态类或静态成员成员时,会自动释放其占用的内存。时,会自动释放其占用的内存。static可用可用于类、字段、方法、属性、运算符、事件和构造函数,但不于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或者类以外的类型。能用于索引器、析构函数或者类以外的类型。用用static声明的声明的字段字段有两有两个个最最常见常见的用法:一的用法:一是是利用它利用它记录记录
8、已已实例化实例化的的对象对象的个数,二的个数,二是是利用它利用它存储存储需要需要在在所有实例之间共享的值。所有实例之间共享的值。用用static声明的声明的静态静态方法可以被重载但不能被重写,因为它们属于类,方法可以被重载但不能被重写,因为它们属于类,而不属于类的任何实例。而不属于类的任何实例。104.1.4 4.1.4 构造函数构造函数1.实例实例构造构造函数函数每每创建一个对象,都会先通过创建一个对象,都会先通过new关键字指明调用的构造函数,这种构造关键字指明调用的构造函数,这种构造函数称为实例构造函数。例如:函数称为实例构造函数。例如:Child child=new Child();或
9、者或者 var child=new Child();这这条语句的条语句的Child()就是被调用的实例构造函数。就是被调用的实例构造函数。114.1.4 4.1.4 构造函数和析构函数构造函数和析构函数2.默认构造默认构造函数和私有构造函数函数和私有构造函数(1)如果构造函数声明包含如果构造函数声明包含static修饰符,则为静态构造函数,否则为实例构造修饰符,则为静态构造函数,否则为实例构造函数。函数。(2)在)在创建创建第一个实例或引用任何静态成员之前,第一个实例或引用任何静态成员之前,CLR都都会会自动调用静态构造函自动调用静态构造函数。例如:数。例如:class SimpleClass
10、 static readonly long baseline;static SimpleClass()baseline=DateTime.Now.Ticks;124.1.4 4.1.4 构造函数构造函数静态静态构造构造函数函数的的特点特点:静态构造函数既没有访问修饰符,也没有参数。静态构造函数既没有访问修饰符,也没有参数。在创建第一个实例或引用任何静态成员之前,在创建第一个实例或引用任何静态成员之前,CLR会自动调用静态会自动调用静态构造函数来初始化类。换言之,静态构造函数是在实例构造函数之构造函数来初始化类。换言之,静态构造函数是在实例构造函数之前执行的。前执行的。程序员无法直接调用静态构造
11、函数,也无法控制何时执行静态构造程序员无法直接调用静态构造函数,也无法控制何时执行静态构造函数函数静态构造函数仅调用一次。如果静态构造函数引发异常,在程序运行所在静态构造函数仅调用一次。如果静态构造函数引发异常,在程序运行所在的应用程序域的生存期内,类型将一直保持未初始的应用程序域的生存期内,类型将一直保持未初始化的状态。化的状态。134.1.4 4.1.4 构造函数构造函数默认默认构造函数和私有构造构造函数和私有构造函数函数每个类要求必须每个类要求必须至少至少提供提供一一个构造函数。如果代码中个构造函数。如果代码中没有没有提供提供构构造造函数,则系统会自动为该类提供一个不带参数的空的构造函数
12、,函数,则系统会自动为该类提供一个不带参数的空的构造函数,这种自动提供的构造函数称为默认构造函数。这种自动提供的构造函数称为默认构造函数。构造函数构造函数一般用一般用public修饰符修饰符,但也可以用,但也可以用private创建私有构造创建私有构造函数。私有构造函数是一种特殊的构造函数,通常用在只包含静函数。私有构造函数是一种特殊的构造函数,通常用在只包含静态成员的类中态成员的类中,利用它可利用它可阻止阻止该类被实例化。该类被实例化。如果不指定构造函数的访问修饰符,默认是如果不指定构造函数的访问修饰符,默认是private。但是,一般。但是,一般都显式地使用都显式地使用private修饰符
13、来清楚地表明该类不能被实例化修饰符来清楚地表明该类不能被实例化。3重载构造重载构造函数函数构造函数可以被重载(构造函数可以被重载(Overloading),但不能被继承。),但不能被继承。144.1.5 4.1.5 析构函数和自动内存管理析构函数和自动内存管理析析构函数构函数析构函数是一种用于实现销毁类实例所需操作的成员。析构函数是一种用于实现销毁类实例所需操作的成员。析构函数不能带参数,也不能包含访问修饰符。析构函数不能带参数,也不能包含访问修饰符。析构函数析构函数是是系统系统自动自动调用的调用的,程序员程序员不能不能显式调用析构函数。显式调用析构函数。注意注意:程序员绝大多数情况下都不需要
14、自己去声明:程序员绝大多数情况下都不需要自己去声明析构析构函数,只有在某些函数,只有在某些特殊的高级应用中才需要这样做。特殊的高级应用中才需要这样做。自动自动内存管理内存管理由由C#使用垃圾回收器实现,即自动决定何时释放和销毁内存使用垃圾回收器实现,即自动决定何时释放和销毁内存。高级程序员也可以高级程序员也可以通过通过System.GC类提供的类提供的静态静态方法在一方法在一定程度上控制垃圾回收器的行为。该定程度上控制垃圾回收器的行为。该类用于类用于请求执行一次回收请求执行一次回收操作、并自动判断是否应该执行析构函数。操作、并自动判断是否应该执行析构函数。154.1.6 new4.1.6 ne
15、w关键字和关键字和thisthis关键字关键字1new关键字关键字在在C#语言中,语言中,new关键字有两个用途,一是用于创建对象,二是用于关键字有两个用途,一是用于创建对象,二是用于隐藏基类的成员隐藏基类的成员。(1)创建)创建对象对象定义定义一个类以后,就可以通过一个类以后,就可以通过new关键字创建该类的实例了。例如:关键字创建该类的实例了。例如:Person p1=new Person()Id=001,Name=张三张三;Person p2=new Person()Id=002,Name=李四李四;(2)对象初始化)对象初始化使用使用new关键字时,还可以用一条语句同时实现创建对象和初
16、始化属关键字时,还可以用一条语句同时实现创建对象和初始化属性,而无须显式调用构造函数,这种独特的构造形式称为对象初始化性,而无须显式调用构造函数,这种独特的构造形式称为对象初始化。(3)隐藏基类的成员)隐藏基类的成员 除了除了创建对象外,也可以在扩充类中通过创建对象外,也可以在扩充类中通过new关键字隐藏基类的成员。关键字隐藏基类的成员。164.1.6 new4.1.6 new关键字和关键字和thisthis关键字关键字2this关键字关键字在在C#语言中,语言中,this关键字有多个用途,其中最常见的用途是表示所访关键字有多个用途,其中最常见的用途是表示所访问的成员为当前对象。除此之外,在某
17、些特殊应用中,还可以利用问的成员为当前对象。除此之外,在某些特殊应用中,还可以利用this关关键字来串联构造函数、声明索引、扩展类型等键字来串联构造函数、声明索引、扩展类型等。(1)访问访问对象对象可通过可通过“this.实例名实例名”来访问当前对象,这是最基本也是最常见的用来访问当前对象,这是最基本也是最常见的用法。法。(2)串联构造函数)串联构造函数利用利用this关键字也可以串联执行构造函数,即可以在某个构造函数中关键字也可以串联执行构造函数,即可以在某个构造函数中调用另一个构造函数,并将本构造函数中的参数传递给另一个构造函数调用另一个构造函数,并将本构造函数中的参数传递给另一个构造函数
18、。(3)作为参数来传递)作为参数来传递利用利用this关键字,还可以将当前对象作为引用参数传递给另一个对象。关键字,还可以将当前对象作为引用参数传递给另一个对象。一般通过构造函数或者方法来实现参数的传递。介绍方法及其参数传递时,一般通过构造函数或者方法来实现参数的传递。介绍方法及其参数传递时,我们再学习其具体用法。我们再学习其具体用法。(4)其他(高级用法)其他(高级用法)174.1.6 new4.1.6 new关键字和关键字和thisthis关键字关键字【例【例4-2】演示演示this关键字的基本用法,运行结果如图关键字的基本用法,运行结果如图4-2所示。所示。184.1.7 static4
19、.1.7 static关键字关键字1基本概念基本概念如果如果有些成员是所有对象共用的,此时可将成员有些成员是所有对象共用的,此时可将成员定义为静态(定义为静态(static)的,当该类被装入内存时,系)的,当该类被装入内存时,系统就会专门开辟一部分区域保存这些静态成员统就会专门开辟一部分区域保存这些静态成员。static可用于类、字段、方法、属性、运算符、事可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或者类件和构造函数,但不能用于索引器、析构函数或者类以外的其他类型。以外的其他类型。194.1.7 static4.1.7 static关键字关键字2静态构造函数
20、静态构造函数如果如果构造函数声明包含构造函数声明包含static修饰符,则为静态构修饰符,则为静态构造函数,否则为实例构造函数造函数,否则为实例构造函数。创建。创建第第1个实例或引个实例或引用任何静态成员之前,用任何静态成员之前,CLR都会自动调用静态构造函都会自动调用静态构造函数数。class SimpleClass static readonly long baseline;static SimpleClass()baseline=DateTime.Now.Ticks;204.1.7 static4.1.7 static关键字关键字3静态类中的静态类中的static关键字关键字(1)声明声
21、明自定义类时如果加上自定义类时如果加上static关键字,则该类就是静态类关键字,则该类就是静态类。(2)静态静态类的主要类的主要特点:特点:u静态类静态类仅仅包含静态成员。包含静态成员。u静态类静态类无法无法被被实例化实例化。这与在非静态类中定义私有构造函数可阻止类被实。这与在非静态类中定义私有构造函数可阻止类被实例化的机制相似。例化的机制相似。u静态类静态类是是密封的,因此不能被继承。密封的,因此不能被继承。u静态类静态类不能不能包含实例构造函数,但可以包含静态构造函数。如果非静态类包含实例构造函数,但可以包含静态构造函数。如果非静态类包含需要进行重要的初始化的静态成员,也应定义静态构造函
22、数包含需要进行重要的初始化的静态成员,也应定义静态构造函数。214.2 4.2 方法方法4.2.1 方法声明方法声明4.2.2 方法中的参数传递方法中的参数传递4.2.3 匿名方法与匿名方法与Lambda表达式表达式224.2.1 4.2.1 方法声明方法声明要点:要点:方法方法是类或结构的一种成员,是一组程序代码的集合,用于是类或结构的一种成员,是一组程序代码的集合,用于完成指定的功能。每个方法都有一个方法名,便于识别和让其他方完成指定的功能。每个方法都有一个方法名,便于识别和让其他方法调用法调用。定义方法的一般形式为定义方法的一般形式为访问修饰符访问修饰符 返回值类型返回值类型 方法名方法
23、名(参数序列参数序列)语句序列语句序列234.2.2 4.2.2 方法中的参数传递方法中的参数传递 方法方法声明中的参数用于向方法传递值或变量引用。方法的参数声明中的参数用于向方法传递值或变量引用。方法的参数从调用该方法时指定的实参获取实际值。有四类参数:从调用该方法时指定的实参获取实际值。有四类参数:值参数、引值参数、引用参数、输出参数和参数数组用参数、输出参数和参数数组。1值参数值参数值参值参数用于传递输入参数。一个值参数相当于一个局部变量,只数用于传递输入参数。一个值参数相当于一个局部变量,只是它的初始值来自为该形参传递的实参是它的初始值来自为该形参传递的实参。2引用参数(引用参数(re
24、f关键字)关键字)引用引用参数用于传递输入和输出参数。为引用参数传递的实参必须参数用于传递输入和输出参数。为引用参数传递的实参必须是变量,并且在方法执行期间,引用参数与实参变量表示同一存储位置是变量,并且在方法执行期间,引用参数与实参变量表示同一存储位置。引用引用参数使用参数使用ref修饰符声明修饰符声明。3输出参数(输出参数(out关键字)关键字)输出输出参数用于传递返回的参数,用参数用于传递返回的参数,用out关键字声明。格式为:关键字声明。格式为:out 参数类型参数类型 参数名参数名244.2.2 4.2.2 方法中的参数传递方法中的参数传递4数组参数(数组参数(params关键字关键
25、字)数组数组参数用于向方法传递可变数目的实参,用参数用于向方法传递可变数目的实参,用params关键字声明。关键字声明。例如,例如,System.Console 类的类的Write和和WriteLine方法使用的就是数组参方法使用的就是数组参数。它们的声明如下:数。它们的声明如下:public class Console public static void Write(string fmt,params object args).public static void WriteLine(string fmt,params object args).254.2.2 4.2.2 方法中的参数传递
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 基础
限制150内