C#面向对象编程基础.ppt
《C#面向对象编程基础.ppt》由会员分享,可在线阅读,更多相关《C#面向对象编程基础.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C#C#C#程序设计教程程序设计教程第第第第7 7章章章章 C#C#面向对象编面向对象编面向对象编面向对象编程基础程基础程基础程基础C#C#C#本章要点本章要点7.1 类和继承7.2 多态7.3 命名空间和程序集C#C#C#7.1 类继承7.2 访问继承的成员7.3 隐藏基类成员7.4 基类访问7.5 使用基类的引用7.6 构造函数的执行7.7 成员访问修饰符7.8 抽象成员7.9 抽象类7.10 密封类7.11 静态类7.12 扩展方法7.13 外部方法C#C#C#7.1 类继承类继承通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展。可以使用一个已经存在的类作为新类的基础。已
2、存在的类称为基类(base class),新类称为派生类(derived class)。派生类成员的组成如下:自己声明中的成员基类的成员要声明一个派生类,需要在类名后加入基类规则说明。基类规则说明由冒号和后面跟着用作基类的名称组成。派生类被描述为直接继承自列出的基类派生类被描述为扩展它的基类,因为它包含了基类的成员,加上在它自己的声明中的任何附加功能派生类不能删除它所继承的任何成员C#C#C#7.1 类继承类继承C#C#C#7.2 访问继承的成员访问继承的成员继承的成员可以被访问,就像它们是派生类自己声明的一样。例子:AccessBaseClassMember.slnC#C#C#7.2 访问继
3、承的成员访问继承的成员C#C#C#所有类都派生自所有类都派生自object类类除了特殊的类object,所有的类都是派生类,即使它们没有基类规格说明。类object是唯一的非派生类,因为它是继承层次结构的基础。没有基类规格说明的类隐式地直接派生自object。不加基类规格说明只是指定object为基类的简写。C#C#C#所有类都派生自所有类都派生自object类类关于类继承的其他重要内容如下:一个类声明的基类规格说明只能有一个单独的类。这称为单继承。虽然类只能直接继承一个基类,但继承的层次没有限制。也就是说,作为基类的类可以派生自另外一个类,而它又可以派生自另外一个类,一直下去,直至最终到ob
4、ject。C#C#C#7.3 隐藏基类成员隐藏基类成员虽然派生类不能删除它继承的任何成员,但它可以隐藏它们。要隐藏一个继承的数据成员。需要声明一个新的相同类型的成员,并使用相同的名称通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承的函数成员要让编译器知道我们在故意隐藏继承的成员,使用new修饰符。没有它,程序可以成功编译,但编译器会警告隐藏了一个继承的成员也可以隐藏静态成员例子:MaskBaseMember.slnC#C#C#7.3 隐藏基类成员隐藏基类成员C#C#C#7.4 基类访问基类访问有时,派生类需要访问被隐藏的继承成员。可以使用基类访问表达式访问隐藏的基类成员。基类访
5、问表达式由关键字base后面跟着一个点和成员的名称组成,如下所示:C#C#C#7.4 基类访问基类访问C#C#C#7.5 使用基类的引用使用基类的引用派生类的实例由基类的实例加上派生类附加的成员组成。派生类的引用指向整个类对象,包括基类部分。如果有一个派生类对象的引用,就可以获取该对象基类部分的引用,使用类型转换运算符把该引用转换为基类类型。类型转换运算符放在对象引用的前面,由圆括号括起的要被转换成的类名组成。例子:UseBaseReference.slnC#C#C#7.5 使用基类的引用使用基类的引用C#C#C#虚方法和覆写方法虚方法和覆写方法前面我们看到,当使用基类引用访问派生类对象时,得
6、到的是基类的成员。虚方法可以使基类的引用访问“升至”派生类内。可以使用基类引用调用派生类的方法,只需要满足下面的条件:派生类的方法和基类的方法有相同的签名和返回类型基类的方法使用virtual标注派生类的方法使用override标注C#C#C#虚方法和覆写方法虚方法和覆写方法C#C#C#虚方法和覆写方法虚方法和覆写方法关于virtual和override修饰符的重要事项如下所示:覆写和被覆写的方法必须有相同可访问性。也就是说,被覆写的方法不能是private等,而覆写方法是public不能覆写static方法或非虚方法方法、属性和索引,以及事件,它们都可以被声明为virtual和overrid
7、e。例子:例子:VirtualMethod.slnVirtualMethod.slnC#C#C#覆写标记为覆写标记为override的方法的方法覆写方法可以在继承的任何层次出现:当使用对象基类部分的引用调用一个覆写的方法时,方法的调用被沿派生层次上溯执行,一直到标记为override的方法的最派生(most-derived)版本。情况1:使用override声明例子:Virtual_override.sln情况2:使用new声明例子:Virtual_override_new.slnC#C#C#7.6 构造函数的执行构造函数的执行在前面,我们看到构造函数执行代码,准备一个类以使用。这包括初始化类
8、的静态成员和实例成员。在这一部分,我们会看到派生类对象有一部分就是基类对象。要创建对象的基类部分,基类的一个构造函数被作为创建实例过程的一部分被调用继承层次链中的每个类在执行它自己的构造函数之前执行它的基类的构造函数C#C#C#7.6 构造函数的执行构造函数的执行当一个实例被创建时,完成的第一件事是初始化对象的所有实例成员。在此之后,基类的构造函数被调用,然后该类自己的构造函数才被执行。C#C#C#构造函数初始化语句构造函数初始化语句默认情况下,在对象被构造时,基类的无参数构造函数被调用。但构造函数可以被重载,所以基类可能有一个以上的构造函数。如果希望派生类使用一个指定的基类构造函数而不是无参
9、数构造函数,必须在构造函数初始化语句中指定它。有两种形式的构造函数初始化语句:第一种形式使用关键字base并指明使用哪一个基类构造函数第二种形式使用关键字this并指明应该使用当前类的哪一个另外的构造函数基类构造初始化语句放在冒号后面,冒号紧跟着类的构造函数声明的参数列表。构造函数初始化语句由关键字base和要调用的基类构造函数的参数列表组成。C#C#C#构造函数初始化语句构造函数初始化语句例子:例子:BaseKeywordExampleBaseKeywordExample.sln.slnC#C#C#类访问修饰符类访问修饰符类可以被系统中其他类看到并访问。术语可见的有时用作术语可访问的。它们可
10、以被互相访问。类的可访问性有两个级别:public和internal。标记为public的类可以被系统内任何程序集中的代码访问标记为internal的类只能被它自己所在的程序集内的类看到这是默认的可访问级别,所以,只有在类的声明中显式地指定修饰符public,程序集外部的代码才能访问该类可以使用internal访问修饰符显式地声明一个类为内部的C#C#C#类访问修饰符类访问修饰符C#C#C#7.7 成员访问修饰符成员访问修饰符到现在为止,我们只讨论了类的可访问性。成员(数据成员和函数成员)的可访问性描述了类成员的可见性。声明在类中的每个成员对系统的不同部分可见,这依赖于类声明中指派给它的访问修
11、饰符。有7个成员访问级别:公有的(public)私有的(private)受保护的(protected)内部的(internal)受保护内部的(protected internal)C#C#C#7.7 成员访问修饰符成员访问修饰符C#C#C#7.7 成员访问修饰符成员访问修饰符必须对每个成员指定成员访问级别。如果不指定某个成员的访问级别,它的隐式访问级别为private成员不能比它的类更可访问。也就是说,如果一个类的可访问性限于它所在的程序集,那么类的成员个体也不能从程序集的外部看到,无论它们的访问修饰符是什么C#C#C#公有成员的可访问性公有成员的可访问性public访问级别是限制性最少的。所
12、有的类,包括程序集内部的类和外部的类都可以自由地访问成员。C#C#C#私有成员的可访问性私有成员的可访问性私有成员的可访问性限制是最严格的。private类成员只能被它自己的类的成员访问。它不能被其他的类访问,包括继承它的类然而,private成员能被嵌套在它的类中的成员访问C#C#C#受保护成员的可访问性受保护成员的可访问性protected访问级别如同private访问级别,除了一点,它允许派生自该类的类访问该成员。C#C#C#内部成员的可访问性内部成员的可访问性标记为internal的成员对程序集内部的所有类可见,但对程序集外部的类不可见。C#C#C#受保护内部成员的可访问性受保护内部成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 面向 对象 编程 基础
限制150内