大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> VB.Net中文教程(9) 重新定义(Overriding)程序

VB.Net中文教程(9) 重新定义(Overriding)程序

时间: 2021-07-31 作者:daque

中心: 从新设置(overriding)步调?????????? 实质 ??????????v 1. 从新设置步调1. 从新设置(override)步调 在运用上﹐罕见如次之情景﹕子类型从父类型接受之步调﹐并不对乎子类型之须要。此时可安排新步调代替之。 图1、步调分子之从新设置 比方﹐salesperson类型含有bonus()步调﹔salesmanager由 salesperson接受而得bonus()步调。bonus()能计划出卖职员之盈利。但是﹐普遍出卖员与出卖司理之盈利计划本领各别﹔以是﹐salesperson之bonus()明显并不实用于salesmanager。这salesmanager类型必需设置实用的bonus()求算出卖司理之盈利。子类型不合意接受之步调而自行设置步调代替之﹐此景象称为「再设置」(redefinition)或「从新设置」(overriding)。自行设置步调与接受步调之称呼沟通。请看个步调﹕'ex01.basimports system.componentmodelimports system.drawingimports system.winforms'-----------------------------------------------------------------------------------------class salesperson protected totalsales as double public sub new(byval t as double) totalsales = t end sub public overridable function bonus() as double bonus = totalsales * 0.008 end functionend classclass salesmanager inherits salesperson public sub new(byval t as double)mybase.new(t) end sub public overrides function bonus() as double bonus = totalsales * 0.008 + 1000 end functionend class'----------------------------------------------------------------------------------------public class form1 inherits system.winforms.form public sub new() mybase.new() form1 = me 'this call is required by the win form designer. initializecomponent() 'todo: add any initialization after the initializecomponent() call end sub 'form overrides dispose to clean up the component list. public overrides sub dispose() mybase.dispose() components.dispose() end sub#region " windows form designer generated code " .......#end region protected sub form1_click( byval sender as object, byval e as system.eventargs) dim jim as new salesperson(50000) messagebox.show("jim's bonus: " + str(jim.bonus())) dim tom as new salesmanager(45000) messagebox.show("tom's bonus: " + str(tom.bonus())) end subend class此步调输入如次﹕ jim's bonus: 400 tom's bonus: 1360 因jim为salesperson类型之东西﹐则jim.bonus()所指的是salesperson之bonus()步调。salesmanager类型接受此bonus()﹐且本人设置新的bonus()步调。此新步调代替了接受之步调。因之﹐alvin.bonus()是指salesmanager本人设置之bonus()步调。 「从新设置」(overriding)的进程中﹐必然也爆发「反复设置」(overloading) 之局面。前者是对准「爷儿俩」类型之间﹐子类型有「矫正」(refinement)或「代替」(replacement) 之表示时﹐才设置同称呼之步调来代替父类型之步调。至于反复设置则范畴较广﹐在类型内也能反复设置步调﹐爷儿俩类型之间也能反复设置步调﹐以至互为独力的两类型之间也能爆发反复设置之局面﹔反复设置之后新步调与原步调之间﹐在「涵义」(semantic)上仅一致,但并不必定沟通,比方bonus(byval y as year)与bonus(byval y as employee)两者涵义不尽沟通。 但是从新设置步调﹐比方上述的 salesperson例子中﹐父类型salesperson.bonus()和子类型salesmanager.bonus()皆表白同一涵义──求算盈利﹐不过计划本领各别结束。因之﹐「从新设置」着眼于以各别的实行进程来代替父类型之步调﹐但新旧步调之间﹐具备普遍的企图。盼您能辨别这容易污染的观念。请再看个步调:'ex02.basimports system.componentmodelimports system.drawingimports system.winforms'--------------------------------------------------------------------------------------public class person private name as string private age as integer public sub new(byval na as string, byval a as integer) name = na age = a end sub public function birthday() as integer birthday = 2001 - age end function public overridable sub display() messagebox.show("name: " + name + " age: " + str(age)) end subend classpublic class teacher inherits person private salary as decimal public sub new(byval na as string, byval a as integer, byval sa as decimal) mybase.new(na, a) salary = sa end sub public overrides sub display() mybase.display() messagebox.show("salary: " + str(salary)) end subend classpublic class student inherits person private student_number as integer public sub new(byval na as string, byval a as integer, byval no as integer) mybase.new(na, a) student_number = no end sub public overrides sub display() mybase.display() messagebox.show("studno: " + str(student_number)) end subend class'---------------------------------------------------------------------------------------public class form1 inherits system.winforms.form public sub new() mybase.new() form1 = me 'this call is required by the win form designer. initializecomponent() 'todo: add any initialization after the initializecomponent() call end sub 'form overrides dispose to clean up the component list. public overrides sub dispose() mybase.dispose() components.dispose() end sub#region " windows form designer generated code " ....... #end region protected sub form1_click( byval sender as object, byval e as system.eventargs) dim x as new teacher("linda", 33, 50500) dim y as new student("tom", 36, 11138) x.display() y.display() end subend class此步调输入: name: linda age: 33 salary: 50500 name: tom age: 36 studno: 11138person的display()不许表露出teacher的salary材料,以是teacher必需「矫正」person原有的display()步调。同样地,student类型也「矫正」person原有的display()步调。n

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.