C#C#面向对象编程基础

上传人:宝路 文档编号:48173463 上传时间:2018-07-11 格式:PPT 页数:48 大小:874KB
返回 下载 相关 举报
C#C#面向对象编程基础_第1页
第1页 / 共48页
C#C#面向对象编程基础_第2页
第2页 / 共48页
C#C#面向对象编程基础_第3页
第3页 / 共48页
C#C#面向对象编程基础_第4页
第4页 / 共48页
C#C#面向对象编程基础_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《C#C#面向对象编程基础》由会员分享,可在线阅读,更多相关《C#C#面向对象编程基础(48页珍藏版)》请在金锄头文库上搜索。

1、C#C#面向对象程序设 计主讲教师:胡 鹏 飞 个人邮箱: 教学邮箱:C#C#C# 5.1 继承 5.2 抽象类与密封类 5.3 多态性第5章 C#面向对象编程基础C#C#C#5.1 继承5.1.1 继承的定义5.1.2 覆盖5.1.3 .NET Framework中重要的类5.1.4 泛型C#C#C#5.1 继承继承是面向对象程序设计的主要特征之一 ,它可以让您重用代码,可以节省程序设计的 时间。继承就是在类之间建立一种相交关系, 使得新定义的派生类的实例可以继承已有的基 类的特征和能力,而且可以加入新的特性或者 是修改已有的特性建立起类的新层次。现实世界中的许多实体之间不是相互孤立 的,它

2、们往往具有共同的特征也存在内在的差 别。人们可以采用层次结构来描述这些实体之 间的相似之处和不同之处。C#C#C#C#C#C#5.1 继承对类进一步细化,从而派生为更具体详细 的类,派生类除自动具有基类中的所有成员以 外,还可以添加自己所特有的属性和行为,并 可根据需要修改基类中个别行为的具体实现。继承体现了一般/特殊关系(派生类是基 类的细化),保证了层次结构的清晰性,且体 现了模型/代码重用的原则,体现了分类学基 本方法。 继承具有级联效应。修改基类成员会影响 其派生类。C#C#C#5.1.1 继承的定义从一个基类派生一个子类的语法是:类修饰符 class 类名:基类类名类的成员;需要使用

3、冒号(:),后跟基类的名字。 冒号的意思相当于“派生于”。 参看li5-1P33C#C#C#5.1.1 继承的定义一个类能够从基类继承成员。关于继承 ,需要注意以下几个重要的方面: 继承是可传递的。如果B派生于A,并且C派生于B ,那么C就继承了B中声明的成员,同时也继承了A 中声明的成员。 派生类能够扩展它的基类。派生类可以添加同它 继承的成员一样的新成员,但是这不能去掉一个 继承的成员的定义。C#C#C#5.1.1 继承的定义 不管它们是否声明了可访问性,构造函数和析构 函数总是不能被继承。 派生类可以通过用相同的名称和签名,声明一个 新的成员方法来覆盖继承的成员。 类可以声明虚拟方法、属

4、性和索引,并且派生类 可以覆盖这些功能成员的执行。这使得类可以展 示多态性,此行为被功能成员调用实现,而这个 调用则要根据实例运行时的类型,调用不同的方 法成员。 C#C#C#保护成员保护成员通过在成员声明中使用 protected修饰符来定义。为了方便派生 类的访问,但又不希望其他无关类随意 访问,这时就可以使用protected修饰符 ,将成员声明为保护的。保护成员P29C#C#C#5.1.2 覆盖覆盖(override)当在子类中声明了与基类相同名字的方 法,而且,使用了相同的签名时,就称派生类 的成员覆盖了基类中的成员。C#中,基类中的功能成员默认为不可覆 盖的,除非使用了virtua

5、l修饰。派生类中若 要覆盖相同签名的基类功能成员,必须使用 override修饰且重新定义其实现。即使派生类覆盖了基类功能成员,仍能 使用“base.成员名”来访问被覆盖的功能成 员。 P33C#C#C#示例5-2类图C#C#C#5.1.2 覆盖覆盖(override)和重载(overload)。 重载它是指允许存在多个同名函数,而这些函数 的签名不同(或许参数个数不同,或许参数类型 不同,或许两者都不同),从而能够处理方法的 参数不同但操作相同的情况。覆盖是指子类重新定义基类的虚函数,二者具 有相同的签名,它是面向对象中多态的基础。 派生类中可以同时对基类中的功能成员进 行重载和覆盖。不能覆

6、盖类的静态成员。C#C#C#new关键字 我们可以在派生类中定义新的成员方法 ,但如果无意中恰好定义了一个和基类 完全一样的方法,怎么办?new关键字用来在派生类中隐藏从基类 中继承的单个成员。参看例子5-2。P34C#C#C#override和new的区别?override 表示重写,用于继承类对基类 中虚成员的实现。new 表示隐藏,声明类的成员,表示隐藏 了基类中同名的成员 。C#C#C#1 Object类所有.NET类都派生于System.Object类。在C# 中在定义类时若没有指定基类,编译器自动假 设这个类派生于System.Object类。System.Object类就成为C#

7、中所以类的根。5.1.3 .NET Framework中重要 的类P26C#C#C#Object类常用方法1)public virtual string ToString() 返回对象的字符串表示方式2)public virtual bool Equals(object obj) 对对象的实例进行比较3)public static bool Equals(object objA, object objB) 对对象的实例进行比较4)public static bool ReferenceEquals(object objA,object objB) 比较两个引用是否指向同一对象5)public

8、Type GetType() 返回对象类型的详细 信息参看Li5-3C#C#C#装箱(boxing)和拆箱(unboxing)是C#类型系统中重要 的概念。它允许将任何类型的数据转换为对象(object), 同时也允许任何类型的对象转换到与之兼容的数据类型,其 实拆箱是装箱的逆过程。 1装箱转换 装箱转换是指将一个值类型的数据隐式地转换成一个对象 类型(object)的数据。把一个值类型装箱,就是创建一个 object类型的实例,并把该值类型的值复制给该这个object 。 例如:下面的两条语句就执行了装箱转换: int k=100; object obj=k; 上面的两条语句中,第1条语句先

9、声明一个整型变量k并对 其赋值,第2条语句则先创建一个object类型的实例obj,然 后将k的值复制给obj。装箱和拆箱C#C#C#在执行装箱转换时,也可以使用显式转换,如: int k=100; object obj=(object) k;例:在程序中执行装箱转换,程序代码如下:using System;class BoxingDemo static void Main( ) Console.WriteLine(“执行装箱转换:“);int k=200;object obj=k;k=300;Console.WriteLine(“obj=0“,obj);Console.WriteLine(“

10、k=0“, k); 装箱的作用就是使类型统一. 参看li5-4 装箱和拆箱C#C#C#2拆箱转换是指将一个对象类型的数据显式地转换成一个值 类型数据。拆箱操作包括分为两步:首先检查对象实例,确保 它是给定值类型的一个装箱值,然后把实例的值复制 到值类型数据中。例如:下面两条语句就执行了拆箱转换:object obj=228;int k=(int)obj;拆箱转换需要(而且必须)执行显式转换,这是它 与装箱转换的不同之处。装箱和拆箱C#C#C#例:在程序中使用拆箱转换,程序代码如下:using Systemclass UnboxingDemostatic void Main( )int k=22

11、8;object obj=k; /装箱转换int j=(int ) obj; /拆箱转换Console.WriteLine(“k=0tobj=1tj=2“, k, obj, j); 注意:装箱与拆箱转换是要损失性能的。装箱和拆箱C#C#C#5.1.3 .NET Framework中重要 的类 String类String类是直接从object派生的 封装好的类类型,字符串类的实例表示 统一的字符编码标准字符串,它的功能 非常强大、用途非常广泛。C#C#C#String类System.String类专门用于存储字符串,允许 对字符串进行许多操作。由于这种数据类型非常 重要,C#提供了它自己的关键字

12、:string,以便 更容易的处理字符串,string关键字是预定义 System.String类的简化的别名。String类提供了许多方法,可以实现例如替 换字符、删除空白和把字符变成大写形式等功能 。 P65C#C#C#String类的方法CompareTo 已重载。将此实例与 指定的对象进行比较。 Concat 已重载。连接String 的一个或多个实例, 或 Object 的一个或多个实例 的值的 String 表示形式。 Copy 创建一个与指定的String 具有相同值的String 的新实例。 CopyTo 将指定数目的字符从此 实例中的指定位置复制到Unicode 字符数组中的

13、指定 位置。 C#C#C#String类的方法IndexOf 已重载。报告String 在此实例中的第一个匹配 项的索引或一个或多个字符的索引。IndexOfAny 已重载。报告指定Unicode 字符数组中的任意字符在 此实例中第一个匹配项的索引。 LastIndexOf 已重载。报告指定的Unicode 字符或String 在此实例中的最后一个匹 配项的索引位置。 C#C#C#String类的方法 Substring 已重载。从此实例检索子字符 串。 ToLower 已重载。返回此String 的小写形式的副本。 ToUpper 已重载。返回此String 的大写形式的副本。 Trim 已

14、重载。从此实例的开始位置和末 尾移除一组指定字符的所有匹配项。 C#C#C#StringBuilder类StringBuilder类表示可变字符串,功 能不如String类强大,但StringBuilder 类通过分配的内存比需要的多,多数操 作在内存中进行,因此在进行替换、添 加、插入或删除字符串中的文本时效率 非常高。String 对象是不可改变的。每次使用 System.String 类中的方法之一或进行运 算时(如赋值、拼接等)时,都要在内存 中创建一个新的字符串对象,这就需要为 该新对象分配新的空间。 P75C#C#C#StringBuilder类而 StringBuilder 则不

15、会。在需要对字 符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂 贵。如果要修改字符串而不创建新的对象 ,则可以使用 System.Text.StringBuilder 类。例如, 当在一个循环中将许多字符串连接在一起 时,使用 StringBuilder 类可以提升性能 。参看li5-6C#C#C#3 ArrayList类 ArrayList类与数组类似,但是有如下优点: 数组要想改变大小,必须重建一个数组,复制 现有元素,然后对数组引用进行更新。但 ArrayList不用,它可以是不定大小的。 如果要从数组中移除一个元素,必须创建元素 复本,然后将删除位置后的所有元素向前移动 一个位置。 ArrayList不用,直接调用它的移 除函数即可。 如果数组插入时,需要将插入位置后的所有元 素都向后移动,空出空间给新插入的元素。而 ArrayList直接调用它的插入函数即可。 注意引入 System.Collections命名空间5.1.3 .NET Framework中重要 的类P50C#C#C#ArrayList类的方法Add 将对象添加到 ArrayList 的结尾处。 Insert 将元素插入 ArrayList 的指定索引处。 Remove 从 ArrayList 中移除特定对象的第一个 匹配项。 Re

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号