第4章(1) 面向对象的高级编程.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:30 大小:237KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

第4章(1) 面向对象的高级编程.ppt

第4章(1)面向对象的高级编程.ppt

预览

免费试读已结束,剩余 20 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第4章面向对象的高级编程第4章面向对象的高级编程[例4-1]通过属性进行封装//可以通过此方法取款publicvoidWithdraw(decimalmoney){if(accountBalance>=money){accountBalance-=money;}}}classProgram{publicstaticvoidMain(string[]args){BankAccountZhangSan=newBankAccount(1000);ZhangSan.Withdraw(100);Console.WriteLine("帐户的余额为{0:C}",ZhangSan.AccountBalance);Console.ReadLine();}}}第4章面向对象的高级编程注意:虽然继承是非常有用的编程概念,但使用不当也会带来一些负面的效果。在下列情况下可以使用类继承。(1)扩充类与基类的关系是“属于”关系而不是“具有”关系,或者说,扩充类不能是基类的“子集”,也不能是只包含基类中的一部分。“具有”关系的类不适合使用类继承,因为这样可能会继承不适当的属性和方法。(2)可以重用基类的代码。例如,如果一个数据库中有多个表,对每一个表都设计添加、删除和修改等功能显然既费时又容易出错,这时使用类继承就是比较好的选择。(3)需要将相同的类和方法应用到不同的数据类型。这时可以利用重写基类中的某些方法来实现。(4)类层次分级比较少,而且其他开发人员不可能添加太多的级别。继承最适合于分级相对较少的类层次结构。一般来说,应将层次结构限制在低于6级。(5)需要只修改基类就可以对继承的类进行全部更改的情况。继承的一个最强大的功能是在基类中进行的更改将自动传播到扩充类中。例如,更新一个方法的实现,从而几十甚至上百个扩充类都可以自动使用该新代码。但是,一般情况下,应避免更改基类成员的名称或类型,因为这样容易导致使用原成员的扩充类出现问题。1、扩充类要声明一个扩充类,可以使用下面的语法:[访问修饰符]class扩充类名称:基类名称{//程序代码}扩充类继承了所有定义在基类中数据的定义和方法。但是要注意,构造函数则排除在外,不会被继承下来,而且扩充类不继承基类的数据值。[例4-2]类和继承。publicclassCat:Animal{publicCat(){Console.WriteLine("Hello,Cat!");}}classProgram{staticvoidMain(string[]args){Cate=newCat();e.Eat();Console.ReadLine();}}}不过,扩充类并不一定能够直接使用基类中所定义的所有数据与方法,如基类的public成员将会成为扩充类的public成员,public表示允许外部类自由地调用;而基类的private成员则只会被基类本身的成员存取,扩充类无法使用基类的private成员。2、密封类密封类是指不能被其他类继承的类。在C#语言中,使用sealed关键字声明密封类。由于密封类不能被其他类继承,因此系统在运行时就可以对密封类的方法进行优化,从而提高系统的性能。同样,sealed关键字也可以限制基类中的方法被扩充类重写。例如,下面的程序代码是错误的。usingSystem;namespaceSealExample{publicsealedclassHello{publicvoidSayHello(){Console.WriteLine("这是基类");}}classProgram:Hello{staticvoidMain(string[]args){Hellome=newHello();me.SayHello();Console.ReadLine();}}}3、基类对象和扩充类对象-2010.3.15新增基类和扩充类变量引用基类和扩充类对象,会产生不同的效果。4.1.3多态性多态性是指类为名称相同的方法提供不同实现方式的能力。利用多态性,就可以调用类中的某个方法而无需考虑该方法是如何实现的。有以下几种实现多态性的方式。通过继承实现多态性:多个类可以继承自同一个类,每个扩充类又可根据需要重写基类成员以提供不同的功能。通过抽象类实现多态性:抽象类本身不能被实例化,只能在扩充类中通过继承使用。抽象类的部分或全部成员不一定都要实现,但是要在继承类中全部实现。抽象类中已实现的成员仍可以被重写,并且继承类仍可以实现其他功能。通过接口实现多态性:多个类实现相同的“接口”,而单个类可以实现一个或多个接口。接口本质上是类需要如何响应的定义。接口仅声明类需要实现的方法、属性和事件,以