第03章 面向对象的编程基础.ppt
《第03章 面向对象的编程基础.ppt》由会员分享,可在线阅读,更多相关《第03章 面向对象的编程基础.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第03章章 面向对象的编面向对象的编程基础程基础23.1 3.1 面向对象的程序设计面向对象的程序设计类与对象类与对象 类:类:一组具有相同数据结构和相同操作的对象的一组具有相同数据结构和相同操作的对象的 集合集合.例如例如:汽车汽车 对象(实例):对象(实例):类的实例化类的实例化.例如例如:卡车卡车 要使用对象,必须先定义类,然后再创建对象。要使用对象,必须先定义类,然后再创建对象。本资料由-校园大学生创业网-提供http:/ 3.1.1 类的组织类的组织1.类的声明类的声明 用用class定义类,声明类的形式为:定义类,声明类的形式为:附加声明附加声明 访问修饰符访问修饰符 class
2、 类名称类名称:基类基类,接口序列,接口序列 字段声明字段声明 构造函数构造函数 方法方法 事件事件 注意注意:中的内容可省或任中的内容可省或任选其一选其一,当两者都有时当两者都有时,先基先基类后接口类后接口43.1.1 3.1.1 类的组织(续)类的组织(续)public class Child private int age;private string name;/不带参数的构造函数不带参数的构造函数 public Child()name=none;/带参数的构造函数带参数的构造函数 public Child(string name,int age)53.1.1 3.1.1 类的组织(续
3、)类的组织(续)this.name=name;this.age=age;/输出方法输出方法 public void PrintChild()Console.WriteLine(0,1 years old.,name,age);public class Program63.1.1 3.1.1 类的组织(续)类的组织(续)public static void Main()/使用使用new关键字创建对象,关键字创建对象,new后是调用的构后是调用的构造函数造函数 Child child1=new Child(Zhang San,11);Child child2=new Child(Li Si,10)
4、;Child child3=new Child();/显示结果显示结果 Console.Write(Child#1:);child1.PrintChild();Console.Write(Child#2:);child2.PrintChild();Console.Write(Child#3:);child3.PrintChild();73.1.1 3.1.1 类的组织(续)类的组织(续)Console.ReadLine();82.对象的生存周期对象的生存周期 对象在建立时分配了内存,创建对象实际上作了对象在建立时分配了内存,创建对象实际上作了两个方面的工作:两个方面的工作:(1 1)使用)使用
5、newnew保留字要求系统分配内存;保留字要求系统分配内存;(2 2)使用构造函数初始化数据。)使用构造函数初始化数据。93.1.1 3.1.1 类的组织(续)类的组织(续)C#C#也允许在程序中定义析构函数(定义方法与也允许在程序中定义析构函数(定义方法与C+C+类似),但是类似),但是 C#C#不允许在程序中调用析构函不允许在程序中调用析构函数,而只能由垃圾回收器调用,原因是如果把销毁数,而只能由垃圾回收器调用,原因是如果把销毁对象的工作全部交给编程者通过调用析构函数完对象的工作全部交给编程者通过调用析构函数完成,而系统不自动实现销毁的功能,一旦编程者忘成,而系统不自动实现销毁的功能,一旦
6、编程者忘记销毁对象,就会引起内存泄漏问题。所以采用垃记销毁对象,就会引起内存泄漏问题。所以采用垃圾回收机制自动销毁不再使用的对象。圾回收机制自动销毁不再使用的对象。因此,我们编写程序时不需要定义析构函数,因此,我们编写程序时不需要定义析构函数,而是由系统自动定义,自动调用。而是由系统自动定义,自动调用。103.1.1 3.1.1 类的组织(续)类的组织(续)注意,虽然注意,虽然C#C#不允许在程序中直接调用析构函不允许在程序中直接调用析构函数销毁对象,但是可以调用安全的数销毁对象,但是可以调用安全的DisposeDispose方法销方法销毁对象,在对性能要求比较高的场合,调用毁对象,在对性能要
7、求比较高的场合,调用DisposeDispose方法直接销毁对象还是很有用的。方法直接销毁对象还是很有用的。垃圾回收机制是在它认为适当的时候自动回收垃圾回收机制是在它认为适当的时候自动回收不再使用的内存的,即检测没有被引用的对象,然不再使用的内存的,即检测没有被引用的对象,然后销毁之。后销毁之。销毁对象也是做了两个方面的工作:销毁对象也是做了两个方面的工作:(1)释放占用的内存;)释放占用的内存;(2)将分配给对象的内存归还给堆()将分配给对象的内存归还给堆(Heap)。)。113.1.1 3.1.1 类的组织(续)类的组织(续)3 3 字段和局部变量字段和局部变量 字段字段:指声明为类一级的
8、对象或值类型的变量。指声明为类一级的对象或值类型的变量。局部变量局部变量:指在方法、事件以及构造函数内声指在方法、事件以及构造函数内声明的变量。明的变量。public class Program public static int j=20;/字段字段 public static void Main()123.1.1 3.1.1 类的组织(续)类的组织(续)int j=30;/局部变量局部变量 Console.WriteLine(j);/输出结果:输出结果:30 Console.WriteLine(Program.j);/输出结果:输出结果:20 Console.ReadLine();13 当
9、字段和局部变量名相同时,如果要引用静当字段和局部变量名相同时,如果要引用静态字段,可以使用下面的形式:态字段,可以使用下面的形式:类名类名.字段名字段名 如果是实例字段,则使用下面的形式:如果是实例字段,则使用下面的形式:this.字段名字段名 这里的这里的this指当前实例。指当前实例。当然,如果没有出现字段和局部变量名重名的当然,如果没有出现字段和局部变量名重名的情况,引用字段的形式和引用局部变量的形式相同。情况,引用字段的形式和引用局部变量的形式相同。143.1.1 3.1.1 类的组织(续)类的组织(续)4.4.静态成员与实例成员静态成员与实例成员类的成员类的成员 类的成员包括字段、属
10、性、构造函数、方法、事件、类的成员包括字段、属性、构造函数、方法、事件、索引、嵌套类。索引、嵌套类。类的成员分静态成员和实例成员类的成员分静态成员和实例成员静态成员在内存中只有一份静态成员在内存中只有一份静态成员要等到应用程序结束时才会退出内静态成员要等到应用程序结束时才会退出内存。存。把只有创建了类的实例才能够使用的成员叫把只有创建了类的实例才能够使用的成员叫实例成员。实例成员。153.1.1 3.1.1 类的组织(续)类的组织(续)5.5.访问修饰符访问修饰符C#C#中有以下成员访问修饰符:中有以下成员访问修饰符:Public (常用)(常用)任何外部的类都可以不受限制的存任何外部的类都可
11、以不受限制的存取这个类的方法和数据成员。取这个类的方法和数据成员。private(常用)(常用)类中的所有方法和数据成员只能在类中的所有方法和数据成员只能在此类中使用,外部无法存取。此类中使用,外部无法存取。(默认默认)Protected 除了让本身的类可以使用之外,任何继承除了让本身的类可以使用之外,任何继承自此类的子类都可以存取。自此类的子类都可以存取。163.1.1 3.1.1 类的组织(续)类的组织(续)Internal 在当前项目中都可以存取。该访问权限一在当前项目中都可以存取。该访问权限一般用于基于组件的开发,因为它可以使组件以私有般用于基于组件的开发,因为它可以使组件以私有方式工
12、作,而该项目外的其它代码无法访问。方式工作,而该项目外的其它代码无法访问。Protected internal 只限于当前项目,或者从该项目只限于当前项目,或者从该项目的类继承的类才可以存取。的类继承的类才可以存取。Partial 局部类型,类的定义和实现可以分布在多个局部类型,类的定义和实现可以分布在多个文件中,但都要使用文件中,但都要使用partial标注,基类只需要声明标注,基类只需要声明一次,若多次声明则必须完全一致。一次,若多次声明则必须完全一致。173.1.2 3.1.2 构造函数构造函数 构造函数是一个特殊的方法,用于在建立对象时构造函数是一个特殊的方法,用于在建立对象时进行初始
13、化的动作,在进行初始化的动作,在C#中,每当创建一个对象中,每当创建一个对象时,都会先调用类中定义的构造函数。时,都会先调用类中定义的构造函数。使用构造函数的好处是它能够确保每一个对象在使用构造函数的好处是它能够确保每一个对象在被使用之前都适当地进行了初始化的动作。被使用之前都适当地进行了初始化的动作。18 另外,构造函数还具有以下特点:另外,构造函数还具有以下特点:1)每个类至少有一个构造函数。若程序代码每个类至少有一个构造函数。若程序代码中没有构造函数则系统会自动提供一个默认中没有构造函数则系统会自动提供一个默认的构造函数。的构造函数。2)一个构造函数总是和它的类名相同。一个构造函数总是和
14、它的类名相同。3)构造函数不包含任何返回值。构造函数不包含任何返回值。193.1.2 3.1.2 构造函数(续)构造函数(续)1.默认构造函数默认构造函数(1)如果在类中不定义构造函数,系统会提供一个)如果在类中不定义构造函数,系统会提供一个默认的构造函数。默认的构造函数。(2)默认构造函数没有参数。)默认构造函数没有参数。203.1.2 3.1.2 构造函数(续)构造函数(续)(3)默认构造函数自动将非静态成员初始化为:)默认构造函数自动将非静态成员初始化为:数值型数值型:如如int、double等,初始化为等,初始化为0。bool类型:初始化为类型:初始化为false.引用类型:初始化为引
15、用类型:初始化为null。(4)如果自己定义了构造函数,则不会自动进行初)如果自己定义了构造函数,则不会自动进行初始化。始化。213.1.2 3.1.2 构造函数(续)构造函数(续)2.重载构造函数重载构造函数 有时候可能会遇到这样的情况:在一个类中的有时候可能会遇到这样的情况:在一个类中的多个方法中都要用到某一个数据成员,而该成员多个方法中都要用到某一个数据成员,而该成员值必须从其他类中传递过来。这时,无参数的构值必须从其他类中传递过来。这时,无参数的构造函数就不能胜任了,解决这个问题最好的办法造函数就不能胜任了,解决这个问题最好的办法就是:重载(就是:重载(Overloading)构造函数
16、。)构造函数。223.1.2 3.1.2 构造函数(续)构造函数(续)using System;using System.Collections.Generic;using System.Text;namespace OverloadingExample class Program public Program()Console.WriteLine(null);233.1.2 3.1.2 构造函数(续)构造函数(续)public Program(string str)Console.WriteLine(str);static void Main()Program aa=new Program(
17、);Program bb=new Program(How are you!);Console.ReadLine();243.1.3 3.1.3 方法方法 方方法法(Method)是是一一组组程程序序代代码码的的集集合合,每每个个方方法法都都有有一一个个方方法法名名,便便于于识识别别和和让让其其他他方方法法调调用。用。1.方法的定义与使用方法的定义与使用 (1 1)方法必须放在某个类中。)方法必须放在某个类中。(2 2)定义方法的语法形式为:)定义方法的语法形式为:访问修饰符访问修饰符 返回值类型返回值类型 方法名称(参数序列)方法名称(参数序列)语句序列语句序列 253.1.3 3.1.3 方
18、法(续)方法(续)定义方法时,需要注意以下几点定义方法时,需要注意以下几点:方法名不能和变量、常数或者任何声明在类中方法名不能和变量、常数或者任何声明在类中其它的成员相同。其它的成员相同。方法可以有参数,也可以没有参数,但是不论方法可以有参数,也可以没有参数,但是不论是否有参数,小括号都是必需的。如果参数序列中是否有参数,小括号都是必需的。如果参数序列中的参数有多个,则以逗号分开。的参数有多个,则以逗号分开。结束某个方法的执行,可以使用结束某个方法的执行,可以使用returnreturn语句,语句,程序遇到程序遇到returnreturn语句后,会将执行流程交还给调用语句后,会将执行流程交还给
19、调用此方法的程序代码段。此外,还可以用此方法的程序代码段。此外,还可以用returnreturn语句语句返回一个值。返回一个值。263.1.3 3.1.3 方法(续)方法(续)如果声明一个非如果声明一个非voidvoid类型的方法,则方法中类型的方法,则方法中必须至少有一个必须至少有一个returnreturn语句。语句。using System;using System.Collections.Generic;using System.Text;namespace MethodExample class Program public int MyMethod()273.1.3 3.1.3 方
20、法(续)方法(续)Console.WriteLine(this is MyMethod.);int i=10;return i;static void Main()Program method=new Program();int j=5;j=method.MyMethod();283.1.3 3.1.3 方法(续)方法(续)Console.WriteLine(the value is 0.,j);Console.ReadLine();293.1.3 3.1.3 方法(续)方法(续)2.方法中的参数传递方法中的参数传递1)传递值类型的参数传递值类型的参数 值类型参数的格式为:值类型参数的格式为:
21、参数类型参数类型 参数名参数名using System;using System.Collections.Generic;using System.Text;namespace ValueTransferExample class Program public static void AddOne(int a)a+;303.1.3 3.1.3 方法(续)方法(续)static void Main()int a=3;Console.WriteLine(调用调用AddOne之前,之前,a=0,a);AddOne(a);Console.WriteLine(调用调用AddOne之后,之后,a=0,a)
22、;Console.ReadLine();313.1.3 3.1.3 方法(续)方法(续)2)传递引用类型的参数传递引用类型的参数引用类型参数的格式为:引用类型参数的格式为:ref 参数类型参数类型 参数名参数名using System;using System.Collections.Generic;using System.Text;namespace ReferenceTransferExample class Program public static void AddOne(ref int a)323.1.3 3.1.3 方法(续)方法(续)a+;static void Main()i
23、nt x=3;Console.WriteLine(调用调用AddOne之前,之前,x=0,x);AddOne(ref x);Console.WriteLine(调用调用AddOne之后,之后,x=0,x);Console.ReadLine();333.1.3 3.1.3 方法(续)方法(续)3)输出多个引用类型的参数输出多个引用类型的参数 输出引用类型参数的格式为:输出引用类型参数的格式为:out 参数类型参数类型 参数名参数名using System;using System.Collections.Generic;using System.Text;namespace ReferenceO
24、utExample class Program public static void MyMethod(out int a,out int b)343.1.3 3.1.3 方法(续)方法(续)a=5;b=6;static void Main()int x,y;MyMethod(out x,out y);Console.WriteLine(调用调用MyMethod之后,之后,x=0,y=1,x,y);Console.ReadLine();353.1.3 3.1.3 方法(续)方法(续)4)传递个数不确定的参数传递个数不确定的参数 需要传递的参数个数不确定时,可以采用需要传递的参数个数不确定时,可
25、以采用params关键关键字。字。using System;using System.Collections.Generic;using System.Text;namespace UncertaintyTransferExample class Program public static float Average(params long v)long total,i;363.1.3 3.1.3 方法(续)方法(续)for(i=0,total=0;i 0)423.1.4 3.1.4 属性(续)属性(续)number=value;/value是关键字,其值由编译器自动生是关键字,其值由编译器自
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第03章 面向对象的编程基础 03 面向 对象 编程 基础
限制150内