资源预览内容
第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
第9页 / 共38页
第10页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C#程序设计课程,第四章面向对象程序设计基础网络教研室刘明信,第4章 面向对象的编程基础,4.1 类4.2 结构4.3 方法4.4 属性与索引器,面向对象的几个基本概念,面向对象的程序设计( OOP )的主要思想是将数据及处理这些数据的操作都封装到一个称为类(Class)的数据结构中。使用这个类时,只需要定义一个类的变量即可,这个变量叫做对象(Object)。通过调用对象的数据成员完成对类的使用。类 在面向对象理论中,类(class)就是对具有相同特征的一类事物所做的抽象(或者说,归纳)。,面向对象的几个基本概念,2. 对象 类是一种抽象,而对象(object)则是实例(instance),是具体的。 如果使用如下格式来代表一个类生成一个对象: 类名 对象名; 则: 电子计算机 ComputerA; 电子计算机 ComputerB; 就代表ComputerA和ComputerB是“电子计算机”类的两个不同对象。,面向对象的几个基本概念,3. 类的属性 属性说明了这个类的特点。 例如“PC计算机”类则可能具备如下属性: 计算机的名称 CPU类型 内存容量 硬盘容量 主板型号 显示适配器型号 声卡型号 操作系统类型 通过这些属性,就可以将不同的PC计算机区分开。,面向对象的几个基本概念,4. 类的方法 类的方法(method)代表了一类事物所具备的动作, 是对属性的操作。 比如:“石英钟”类的方法有:秒针前进一格、分 针前进一格、时针前进一格等;而“录像机”类所具备 的方法可以有:播放、定格、录像、倒带、快进等。5. 派生和继承 在类的继承中,被继承的类称为基类(又称为父类), 由基类继承的类称为派生类(又称为子类)。派生类自动获 得基类的所有属性和方法,而且可以在派生类中添加新的属 性和方法。,面向对象的几个基本概念,6.多态性 多态性是指在一般类中定义的属性或行为,被特殊 类继承之后,可以具有不同数据类型或表现出不同的行 为。就是程序在运行时,会自动判断对象的派生类型,并 调用相应的方法。 7.封装 封装就是把对象的属性和服务结合成一个独立的系 统单位,并尽可能隐蔽对象的内部细节。,4.1 类,类与对象类:一组具有相同数据结构和相同操作的对象的集合。 例如:汽车对象(实例):类的实例化 。例如:卡车注意:要使用对象,必须先定义类,然后再创建对象。对象的生存周期对象在建立时分配了内存,创建对象实际上作了两个方面的工作:(1)使用new保留字要求系统分配内存;(2)使用构造函数初始化数据。销毁对象也是做了两个方面的工作: (1)释放占用的内存; (2)将分配给对象的内存归还给堆(Heap)。,4.1 类的组织,1.类的声明用class定义类,声明类的形式为:访问修饰符 class 类名称:基类 ,接口序列 字段声明 构造函数 方法 事件,注意:中的内容可省或任选其一,当两者都有时,先基类后接口,4.1 类的组织(续),public class Child private int age; private string name; / 不带参数的构造函数 public Child() name = none; / 带参数的构造函数 public Child(string name, int age) ,如果不指明,则默认为private,4.1 类的组织(续),this.name = name; this.age = age; / 输出方法 public void PrintChild() Console.WriteLine(0, 1 years old., name, age); public class Program,4.1 类的组织(续),public static void Main() /使用new关键字创建对象,new后是调用的构造函数 Child child1 = new Child(Zhang San, 11); Child child2 = new Child(Li Si, 10); Child child3 = new Child(); / 显示结果 Console.Write(Child #1: ); child1.PrintChild(); Console.Write(Child #2: ); child2.PrintChild(); Console.Write(Child #3: ); child3.PrintChild();,4.1 类的组织(续),Console.ReadLine(); 输出结果:Child #1: Zhang San, 11 years old.Child #2: Li Si, 10 years old.Child #3: none, 0 years old.,4.1.2 构造函数,作用:构造函数是一个特殊的方法,用于在建立对象时进行初始化的动作。 好处:确保每一个对象在被使用之前都适当地进行了初始化的动作。 构造函数特点: 1) 每个类至少有一个构造函数。若程序代码中没有构造函数则系统会自动提供一个默认的构造函数。 2) 一个构造函数总是和它的类名相同。 3) 构造函数不包含任何返回值。 4) 构造函数总是public的。 一般在构造函数中作初始化工作,对于执行过程用时比较长的程序代码,最好不要放在构造函数中。,4.1.2 构造函数(续),1、默认构造函数(1)如果在类中不定义构造函数,系统会提供一个默认的构造函数。(2)默认构造函数没有参数。(3)默认构造函数自动将非静态成员初始化为: 数值型:如int、double等,初始化为0。 bool类型:初始化为false. 引用类型:初始化为null。(4)如果自己定义了类的构造函数,则所有初始化工作由编程者自己完成。,4.1.2 构造函数(续),2. 重载构造函数 有时候可能会遇到这样的情况:在一个类中的多个方法中都要用到某一个数据成员,而该成员值必须从其他类中传递过来。这时,无参数的构造函数就不能胜任了,解决这个问题最好的办法就是:重载(Overloading)构造函数。,4.1.2 构造函数(续),using System;using System.Collections.Generic;using System.Text;namespace OverloadingExample class Program public Program() Console.WriteLine(null); ,4.1.2 构造函数(续),public Program(string str) Console.WriteLine(str); static void Main() Program aa = new Program(); Program bb = new Program(How are you!); Console.ReadLine(); ,4.1.3 字段和局部变量,字段:指声明为类一级的对象或值类型的变量。 局部变量:指在方法、事件以及构造函数内声明的变量。 public class Program public static int j=20; /字段 public static void Main() int j=30; /局部变量 Console.WriteLine(j); /输出结果:30 Console.WriteLine(Program.j); /输出结果:20 Console.ReadLine(); ,4.1.3 字段和局部变量,当字段和局部变量名相同时,如果要引用静态字段,可以使用下面的形式: 类名.字段名 如果是实例字段,则使用下面的形式: this.字段名 这里的this指当前实例。 当然,如果没有出现字段和局部变量名重名的情况,引用字段的形式和引用局部变量的形式相同。,4.1.4 静态成员与实例成员,类的成员包括字段、属性、构造函数、方法、事件、索引、嵌套类。类的成员分静态成员和实例成员静态成员在内存中只有一份静态成员要等到应用程序结束时才会退出内存。把只有创建了类的实例才能够使用的成员叫实例成员。,4.1.5 访问修饰符,C#中有以下成员访问修饰符:Public (常用)任何外部的类都可以不受限制的存取这个类的方法和数据成员。private (常用)类中的所有方法和数据成员只能在此类中使用,外部无法存取。(默认)Protected 除了让本身的类可以使用之外,任何继承自此类的子类都可以存取。Internal 在当前项目中都可以存取。该访问权限一般用于基于组件的开发,因为它可以使组件以私有方式工作,而该项目外的其它代码无法访问。Protected internal 只限于当前项目,或者从该项目的类继承的类才可以存取。 Partial 局部类型,类的定义和实现可以分布在多个文件中,但都要使用partial标注,基类只需要声明一次,若多次声明则必须完全一致。,class ClassA public int a; private int b; protected int c; public void SetA( ) a=1; /正确,允许访问类自身公有成员 b=2; /正确,允许访问类自身私有成员 c=3; /正确,允许访问类自身保护成员 class ClassB:ClassA public void SetB( ) ClassA BaseA=new ClassA( ); BaseA.a=5; /正确,允许访问基类公有成员 BaseA.b=23; /错误,不允许访问基类私有成员 BaseA.c=68; /正确,允许访问基类保护成员 class ClassC public void SetB( ) ClassA BaseA=new ClassA( ); BaseA.a=5; /正确,允许访问类的其他公有成员 BaseA.b=23; /错误,不允许访问类的其他私有成员 BaseA.c=68; /错误,不允许访问类的其他保护成员 ,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号