好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第06章 面向对象程序设计.ppt

67页
  • 卖家[上传人]:zw****58
  • 文档编号:51600780
  • 上传时间:2018-08-15
  • 文档格式:PPT
  • 文档大小:292.50KB
  • / 67 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • C#程序设计教程第06章 面向对象程序设计1本章重点• 概述 • 命名空间 • 类 • 对象 • 构造函数和析构 函数 • 静态成员 • 属性 • 方法 • 索引器 • 委托 • 事件 • 运算符重载 • 类的转换 2面向对象的基本概念2-1• 类和对象 – 通常把具有相同性质和功能的事物所构成的整体称为 类 – 属于一个类的某个具体的事物称为该类的一个对象 • 属性、方法和事件 – 属性是指一个类的性质 – 方法是指一个类的功能 – 事件是对象能够识别和响应的某些操作 • 封装 – 封装是指将用来描述客观事物的一组数据和操作包装 在一起,形成一个类3面向对象的基本概念2-2• 继承 – 当一个新类保留了原来某个类所有的属性和方法,并 增加了属于自己的新属性和新方法,则称这个新类为 派生类 – 原来的类是派生类的基类 – 基类和派生类之间存在着继承关系 • 重载与重写 – 重载是指方法名称相同,但参数类型或个数不同就会 有不同的具体实现 • 重载出现在同一个类中 – 重写是指方法名称和参数都相同,但具体实现不同 • 重写出现在派生类中4面向对象的优点• 维护简单 – 类的封装使得类与类之间具有一定的独立性, 从而类的修改更容易实现 • 可扩充性 – 如果有一个具有某种功能的类,可以通过继承 很方便地扩充这个类 • 代码重用 – 通过建立类库,可以很方便地使用已有的类的 功能5命名空间概述• 在.NET中,类是通过命名空间(namespace) 来组织的 – 命名空间提供了可以将类分成逻辑组的方法, 将系统中的大量类库有序地组织起来,使得类 更容易使用和管理 – 可以将命名空间想像成文件夹,类的文件夹就 是命名空间 – 不同的命名空间内,可以定义许多类 – 在每个命名空间下,所有的类都是“独立”且“ 唯一”的6使用命名空间5-1• 在C#中,使用命名空间有两种方式– 一种是明确指出命名空间的位置,即直接定位 – 另一种是通过using关键字引用命名空间 • 直接定位 – 在应用程序中,任何一个命名空间都可以在代码中直 接使用 – 例如 • System.Console.WriteLine(“ABC“); • 这个语句是调用了System命名空间中Console类的WriteLine方 法7使用命名空间5-2• 使用using关键字– 在应用程序中要使用一个命名空间,还可以采 取引用命名空间的方法,在引用后,应用程序 中就可使用该命名空间内的任一个类了 – 引用命名空间的方法是利用using关键字,其使 用格式如下 • using [别名=] 命名空间 • 或 using [别名=] 命名空间.成员Using System; … Console.WriteLine(Math.Sin(1)); ---------------------------------------------------------- Using System; Using abc=System.Math; … Console.WriteLine(abc.Sin(1));8使用命名空间5-3• 自定义命名空间 – 在C#中,除了使用系统的命名空间外,还可以在应用 程序中自已声明命名空间 – 其使用语法格式如下 • namespace 命名空间名称 • { 命名空间定义体 } – 其中,“命名空间名称”指出命名空间的唯一名称,必 须是有效的C#标识符 – 例如,在应用程序中自定义Ns1命名空间 • namespace Ns1 • { class A {…} • class B {…} • }9使用命名空间5-4• 命名空间可以嵌套使用,例如 – namespace Ns1 – { – namespace Ns2 – { – class B {…} – } – }10使用命名空间5-5• 在C#开发中,每个项目会自动附加一个默 认的命名空间 • 如果应用程序中没有自定义的命名空间, 则程序中所定义的所有类和模式都属于一 个默认的命名空间,其名称就是项目的名 称 – 这个命名空间称为根命名空间11类的声明2-1• 类的声明语法格式如下 – [类的修饰符] class 类名 [:基类名] – { – //类的成员; – } • 其中 – 类名要求是合法的标示符 – 类的修饰符说明见下表类的修饰符说明 public公有类。

      表示不受限制对该类 的访问 protected保护类表示只能从所在类和所在类派生的子类进行访 问 internal内部类只有其所在类才能访问 private私有类只有该类才能访问 abstract抽象类表示该类是一个不完整的类,不允许建立类的 实例 sealed密封类不允许从该类派生新的类12类的声明2-2例如,以下声明了一个Person类:public class Person{public int pno; //编号public string pname;//姓名public void setdata(int no,string name){pno=no; pname=name;}public void dispdata(){Console.WriteLine(“{0} {1}“, pno, pname);}}13类的成员类的成员说明 字段字段存储类要满足其设计所需要的数据,亦称为数据成员 属性属性是类中可以像类中的字段一样被访问的方法属性可以为类 字段提供保护,避免字段在对象不知道的情况下被更改 方法方法定义类可以执行的操作方法可以接受提供输入数据的参数, 并且可以通过参数返回输出数据。

      方法还可以不使用参数而直接返 回值 事件事件是向其他对象提供有关事件发生(如单击按钮或成功完成某个 方法)通知的一种方式 索引器索引器允许以类似于数组的方式为对象建立索引 运算符运算符是对操作数执行运算的术语或符号,如 +、*、“);p1.dispoint();TPoint p2 = new TPoint();// 定义对象p2p2.setpoint(8,3);Console.Write(“第二个点=>“);p2.dispoint();}} } 20构造函数• 构造函数是在创建对象时执行的类方法 • 构造函数具有如下性质 – 构造函数的名称与类的名称相同 – 构造函数没有类型,即它既不属于返回值函数也不属 于void函数– 一个类可以有多个构造函数,构造函数可以重载 – 当创建对象时,调用哪一个构造函数取决于传递给它 的参数类型 – 构造函数不能被继承21构造函数示例• 【例6.2】 设计一个控制台应用程序,说明 调用构造函数的过程namespace Proj6_2 { class Program{ public class TPoint1 //声明类TPoint1{ int x, y; //类的私有变量public TPoint1() { } //默认的构造函数public TPoint1(int x1, int y1) //带参数的构造函数{ x = x1; y = y1; }public void dispoint(){ Console.WriteLine(“({0},{1})“, x, y); }}static void Main(string[] args){ TPoint1 p1 = new TPoint1(); //调用默认的构造函数Console.Write(“第一个点=>“);p1.dispoint();TPoint1 p2 = new TPoint1(8, 3);//调用带参数的构造函数Console.Write(“第二个点=>“);p2.dispoint();}} } 22析构函数• 在对象不再需要时,希望它所占的存储空间能被 收回,C#中提供了析构函数用于专门释放被占用 的系统资源 • 析构函数具有如下性质 – 析构函数在类对象销毁时自动执行 – 一个类只能有一个析构函数,而且析构函数没有参数 ,即析构函数不能重载 – 析构函数的名称是“~”加上类的名称(中间没有空格) 。

      – 与构造函数一样,析构函数也没有返回类型 – 析构函数也不能被继承23析构函数示例• 【例6.3】 设计一个控制台应用程序,说明 调用析构函数的过程using System; namespace Proj6_3 { class Program{ public class TPoint2 //声明类TPoint2{int x, y;public TPoint2(int x1, int y1) //带参数的构造函数{ x = x1; y = y1; }~TPoint2(){ Console.WriteLine(“点=>({0},{1})“, x, y); }}static void Main(string[] args){TPoint2 p1 = new TPoint2(2,6);TPoint2 p2 = new TPoint2(8, 3);}} } 24静态字段• 静态字段是类中所有对象共享的成员,而不是某 个对象的成员 – 也就是说静态字段的存储空间不是放在每个对象中, 而是和方法一样放在类公共区中 – 对静态字段的操作和一般字段一样,定义为私有的静 态字段不能被外界访问 • 静态字段的使用方法如下 – 静态字段的定义与一般字段相似,但前面要加上static 关键词 – 在访问静态字段时采用如下格式 • 类名.静态字段名25静态方法• 静态方法与静态字段类似,也是从属于类,都是 类的静态成员 – 静态方法的定义是在一般方法定义前加上static关键字 • 调用静态方法的格式如下 – 类名.静态方法名(参数表); • 注意 – 静态方法只能访问静态字段、其他静态方法和类以外 的函数及数据,不能访问类中的非静态成员 • 因为非静态成员只有对象存在时才有意义 – 但静态字段和静态方法可由任意访问权限许可的成员 访问26属性• 属性描述了对象的具体特性,它提供了对 类或对象字段的访问 • 属性不直接操作类的字段,而是通过访问 器进行访问27属性声明• 属性在类模块里是采用下面的方式进行声明的, – 指定变量的访问级别、属性的类型、属性的名称,然 后是get访问器或者set访问器代码块– 其语法格式如下 • 修饰符 数据类型 属性名称 • { • get访问器 • set访问器 • } – 其中,修饰符可以是 new、public、protected、 internal、private、static、virtual、override和abstract28属性示例• 【例6.7】 设计一个控制台应用程序,说明 属性的使用using System; namespace Proj6_7 { public class TPoint3 //声明类TPoint3{ int x,y;public int px{get//get访问器{ return x; }set//set访问器{ x = value; }}public int py{get//get访问器{ return y; }set//set访问器{ y = value; }}};class Program{ static void Main(string[] args){TPoint3 p = new TPoint3();p.px = 3; p.py = 8; //属性写操作Console.WriteLine(“点=>({0},{1})“, p.px, p.py);//属性读操作}} } 输出:点=>(3,8)29方法• 方法包含一系列的代码块 – 从本质上来讲,方法就是和类相关联的动作, 是类的外部界面 – 用户可以通过。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.