版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一单元面向对象的基本概念类类就是对具有相同数据和相同操作的一组相似对象的定义,也就是说,类是对具有相同特性和行为的一个或多个对象的描述。有了类这个概念之后,我们就可以实现面向对象编程4个关键的组成部分:抽象、封装、继承和多态了。对象与类对应的就是实例了,实例就是由某个特定的类所描述的一个具体的对象。“对象是类的实例,类是有公共特性的对象的抽象。”字段、属性、方法和事件类由字段、属性、方法和事件组成,字段、属性、方法和事件都是对象的成员。字段表示对象包含的信息。属性也是用来表示对象包含的信息,属性与字段很类似。方法表示对象可执行的操作。事件是对象从其他对象或应用程序接收的通知,或者是对象传输到其他对象或应用程序的通知。封装、继承和多态“封装”意味着将一组相关属性、方法和其他成员视为一个单元或对象。换一句话来说,封装实际上就是将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。“继承”描述了基于现有类创建新类的能力。新类继承基类的所有属性、方法和事件,而且还可以在该新类中添加其他属性和方法。利用多态性性,可以根据调用方法的对象在运行时类型的不同,达到可以使用同一个方法名处理不同的操作的效果。第二单元在VB.NET中创建类使用Class关键字可以创建一个类;类里面可以包含字段、属性、方法和事件。举例说明如下,定义一个类,用于描述一个学生的信息,如姓名、成绩等:PublicClassStudentClassPublicnameAsStringPrivatescoreAsSinglePublicSubinputScore(ByValsngScoreAsSingle)IfsngScore>=0AndsngScore<100Thenscore=sngScoreElseMessageBox.Show("输入的成绩不合法!")EndIfEndSub
PublicFunctionoutputScore()RETurnscoreEndFunctionEndClass
‘在窗体中新建一个Button控件,在其Click事件的处理程序中编写如下代码:
DimstAsNewStudentClass="张三"st.inputScore(80)DimstrTmpAsStringstrTmp=&"同学的成绩是:"&st.outputScore()&"分"MessageBox.Show(strTmp)对象的创建和使用访问修饰符访问修饰符定义了类的可访问部分和不可访问部分之间的边界。Property过程Property过程是用于给属性赋值或者取属性值的一系列代码。类的成员变量与成员变量对应的Property过程就构成了类的属性.VisualBasic.NET提供以下Property过程:GET过程用于返回属性值,当在表达式中访问属性时调用它们。SET过程用于将属性设置为某值,当给属性赋值时调用它们。声明Property过程的语法[访问修饰符][ReadOnly\WriteOnly]Property过程名([参数列])As数据类型GET'...RETurn属性值EndGETSET([ByValvalueAs数据类型])'...
属性值=valueEndSETEndProperty通过Property过程,可以将属性定义为只读(ReadOnly)、只写(WriteOnly)或读/写类型(默认值为读/写)。如果属性为只读(GET)或只写(SET),则可以单独定义相应的GET或SET过程之一。举例:定义一个类,用于描述学生的信息在解决方案资源管理器中点击右键,选择“添加”->“添加类”,然后双击添加如下代码:PublicClassStudentClassPrivatenumberAsStringPrivatenameAsStringPrivateageAsIntegerPrivatescoreAsSinglePublicPropertyinputScore()AsSingleGETRETurnscoreEndGETSET(ByValValueAsSingle)IfValue>=0AndValue<100Thenscore=ValueElseMessageBox.Show("输入的成绩不合法!")EndIfEndSETEndPropertyPublicSubinputStudent(ByValstrNumberAsString,ByValstrNameAsString,ByValintAgeAsInteger=0)number=strNumbername=strNameage=intAgeEndSubPublicSuboutputStudent()DimstrTmpAsStringstrTmp=number&"号"&name&"同学:"&Chr(10)strTmp+="年龄:"&age&Chr(10)strTmp+="成绩:"&score&"分"MessageBox.Show(strTmp)EndSubEndClass:然后,在双击原有窗体的Button1控件,在其Click事件的处理程序中添加如下代码:
DimstAsNewStudentClass‘用StudentClass类声明一个对象
st.inputStudent("001","张三",20)st.inputScore=95st.outputStudent()构造函数构造函数是一个特殊的方法,它在类进行实例化的时候自动运行。在VB.NET中,构造函数总是命名为SubNew。举例如下,给StudentClass类添加一个构造函数,用于初始化类成员:PublicClassStudentClassPrivatenumberAsStringPrivatenameAsStringPrivateageAsIntegerPrivatescoreAsSingle
SubNew(ByValstrNumberAsString,ByValstrNameAsString,OptionalByValintAgeAsInteger=0)‘声明一个构造函数
number=strNumbername=strNameage=intAgescore=0DimstrTmpAsStringstrTmp=name&"同学的成绩是:"&score&"分"MessageBox.Show(strTmp)
EndSubEndClass有了构造函数,这样就可以确保你声明的每一个对象的成员都是经过初始化的,避免了引用空值等错误。
DimstAsNewStudentClass("001","张三",18)注意:构造函数只能由对象在创建时自动调用,永远不能被直接调用。共享成员要定义一个共享的字段,只需在字段名前面加上Shared关键字即可,除此之外,其他的要求跟普通的字段一样。我们知道,每个类对象都有自己的类数据成员的拷贝,但是,共享字段对每个类来说只有一个拷贝,共享字段可被该类的所有对象共享访问。
同理,使用Shared关键字也可以将一个方法声明为共享方法;如果一个声明为了共享方法,那么,无需实例化该共享方法所在的类对象也可以调用该方法。因为,在对象还没有实例化之前,共享成员就已经存在了。调用共享方法的方式是:类名后跟一个成员运算符".",然后加上共享方法名。释放资源虽然VB.NET对象不存在真正的析构函数,但是它提供了两个方法(Finalize和Dispose)用于释放资源。重载所谓重载就是在一个类中用相同的名称但是不同的参数列表创建一个以上的过程、构造函数或属性。这些被重载的方法除了具有相同的方法名外,每个方法的参数数据类型、或者参数个数、或者参数数据类型的排列顺序必须互不相同。在方法被调用时,计算机根据参数的不同来决定调用的到底是哪一个具体的方法。举例PublicClassTryClass
PublicFunctionAdd(ByValNum1AsInteger,ByValNum2AsInteger)AsIntegerAdd=Num1+Num2EndFunction
PublicFunctionAdd(ByValNum1AsDouble,ByValNum2AsDouble)AsDoubleAdd=Num1+Num2EndFunction
PublicFunctionAdd(ByValNum1AsString,ByValNum2AsString)AsStringAdd=Num1&Num2EndFunctionEndClass‘声明一个对象,调用三个重载的方法
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimtAsNewTryClassMessageBox.Show(t.Add(1,1))MessageBox.Show(t.Add(1.23,2.98))MessageBox.Show(t.Add("Hello","World"))EndSub第三单元VB.NET中实现类的继承基本继承在VB.NET中,子类用Inherits关键字来继承一个父类。基本继承的格式如下:访问修饰符Class子类名
Inherits父类名…
…
EndClass注意,VB.NET只允许单一继承,不允许多重继承,即子类不能从多个父类继承而来,它只能继承于一个父类。阻止继承类可以在类的声明中加入NotInheritable关键字实现阻止继承,这样可以定义一个不能被子类继承的类。称这种类为阻止继承类。阻止继承类的定义格式如下:访问修饰符NotInheritableClass类名…
…
EndClass当类声明为阻止继承时,其他类就不能够使用Inherits关键字来继承该类的属性和方法等。重写当子类从一个父类中继承的时候,可以通过重写父类成员来为子类提供一个不同的实现,重写允许子类使用自己的实现代替相同名称的父类的成员。在VB.NET中,要实现重写,就必须要在被重写的父类成员前面添加Overridable关键字,在重写的子类成员前面添加Overrides关键字。要注意,重写的成员必须具有相同的名称、相同的返回值类型、相同的参数数据类型、参数个数和参数排列顺序,否则,不能使用重写。而且,不能重写字段、常量或者共享成员。
覆盖因为重写有严格的要求,重写的成员必须具有相同的名称、相同的返回值类型、相同的参数数据类型、参数个数和参数排列顺序。但有时候,我们确实不能遵循该规则,这怎么办呢?这时候,我们可以通过覆盖来隐藏父类成员的实现,而用一个全新的子类成员来代替它。覆盖与重写不同,无论被覆盖的成员的参数如何,无论被覆盖的成员是否有多个重载,只要父类中的成员与子类中含Shadows关键字的成员同名,那么父类中所有同名的成员都会被隐藏掉。在VB.NET中,可以使用Shadows关键字来实现覆盖。重载继承成员事实上,除了在同一个类中可以实现重载外,在继承的时候也可以实现重载。当子类从一个父类中继承的时候,可以通过重载继承成员的方式在子类中扩展父类成员的实现。对于子类来说,重载继承成员与在同一个类中实现重载很相似,重载的成员除了具有相同的名称外,每个成员的参数数据类型、或者参数个数、或者参数的排列顺序必须互不相同。在VB.NET中,要重载继承成员,只需在重载的子类成员前面添加Overloads关键字即可。注意:但是,当子类中重载的成员与父类中被重载的成员具有相同的名称和参数列表,即参数数据类型、参数个数、参数的排列顺序都一样,那么,父类中的成员就会被子类中的成员覆盖。继承中的构造函数在VB.NET中,子类可以用Inherits关键字来继承一个父类。如果父类没有构造函数或者有一个不带参数的构造函数,那么,在继承的子类中就不需要严格地为子类定义一个显式的构造函数。但是,构造函数并不是普通的方法,子类并不能直接地继承父类的构造函数。如果父类中有构造函数且所有的构造函数都带有参数,那么,我们就必须要在子类中定义一个显式的构造函数,以便继承父类的构造函数。
如果父类中有构造函数且所有的构造函数都带有参数,那么,我们就必须要在子类中定义一个显式的构造函数,并且,该子类中的构造函数的第一行可执行语句必须是对父类构造函数的调用。例如:PublicClassNewStudentClassInheritsStudentClassSubNew(ByValintNumberAsInteger,ByValstrNameAsString,ByValsngScoreAsSingle)
MyBase.New(intNumber,strName)EndSubEndClass抽象继承抽象继承是在类的声明中加入MustInherit关键字,用于指定该类只能用作父类,供其他类继承,但是,无法直接创建该类的实例。我们称这种类为抽象类,抽象类是一个没有具体对象的概念类。注意,抽象类可以不提供类的具体实现,也可以给出一部分具体实现,或者也可以给出类所有的具体实现。但,无论是那一种情况,抽象类都必须靠子类来实例化,不能用抽象声明一个具体的对象。在抽象类中,可以通过MustOverride关键字来声明方法是虚拟的方法,必须在子类继承的时候给出具体实现。而且,在声明虚拟方法的时候,你只需给出方法头即可,EndSub、EndFunction、EndProperty等必须省略。
可视继承任何一个Form(窗体)在缺省情况下,都是从.NET中的System.Windows.Forms.Form类中继承出来的,只要打开代码编辑窗口即可以看到如下代码:PublicClassForm1InheritsSystem.Windows.Forms.Form…
…EndClass其实,可视继承就是从现有的可视控件(包括窗体)中继承出新的控件(或窗体)。把父类从System.Windows.Forms.Form改为Form1,即从Form1中派生了4个子类的窗体,这4个子类的窗体拥有如同Form1窗体的界面。例如:PublicClassForm2InheritsSystem.Windows.Forms.Form改为:PublicClassForm2InheritsForm1注意:如果想让派生窗体的控件允许修改,则父窗体中的控件Modifiers属性应设为Protected;否则,不允许修改派生窗体的控件属性;第四单元VB.NET中实现接口在接口中只包含了成员的定义,并没有给出成员的实现,即只给出成员的名称、所用到的参数和返回值的类型。接口的实现,完全由实现接口的类来承担,接口中不能存在任何可执行的代码。(一)定义接口在VB.NET中,用Interface关键字来定义接口,格式如下:[访问修饰符]Interface接口名…
…EndInterface例如,定义一个空的接口IOperation:PublicInterfaceIOperation…
…EndInterface接口成员定义,我们可以放在接口的框架中,但是,不需要定义接口成员的访问修饰符,接口的访问修饰符决定了接口成员的方法修饰符。和定义抽象类一样,只需给出成员头即可,EndSub、EndFunction、EndProperty等必须省略。举例PublicInterfaceIOperation‘定义了一个IOperation接口,在接口中定义了5个方法成员
Functionadd(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleFunctionsubtract(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleFunctionmultiply(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleFunctiondivide(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleSubalarm(ByValstrMsgAsString)EndInterface(二)实现接口在VB.NET中,由类用Implements关键字来接口,例如:PublicClassOperationClass
ImplementsIOperation…
…EndClass如果定义了一个类来实现某个接口,那么,该类就必须要实现该接口中定义的所有的接口成员。接口成员的实现也是用Implements关键字来指定。举例‘定义了一个类OperationClass实现了IOperation接口及接口中的所有成员PublicClassOperationClassImplementsIOperationPublicFunctionadd(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleImplementsIOperation.addadd=sngNum1+sngNum2EndFunctionPublicFunctionsubtract(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleImplementsIOperation.subtractsubtract=sngNum1-sngNum2EndFunctionPublicFunctionmultiply(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleImplementsIOperation.multiplymultiply=sngNum1*sngNum2EndFunctionPublicFunctiondivide(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleImplementsIOperation.dividedivide=sngNum1/sngNum2EndFunctionPublicSubararm(ByValstrMsgAsString)ImplementsIOperation.alarmMessageBox.Show("警告:"&strMsg)EndSubEndClass第五单元事件事实上,用VB.NET开发的绝大多数应用程序都是事件驱动的,即执行流程是由外界发生的事件所确定的。所谓的事件就是一个信号,它告知应用程序有重要情况发生。例如,用户单击窗体上的某个按钮时,窗体会引发一个Click事件并调用一个处理该事件的过程。声明事件在VB.NET中,可以使用Event关键字在类、结构、模块和接口内部声明事件,格式如下所示:[访问修饰符]Event
事件名([参数列])举例说明,在Logger类中声明事件如下:PublicClassLogger
EventLogAction(ByValactionNameAsString)EndClass引发事件事件就像是通告已发生重要情况的消息。广播该消息的行为叫做引发事件。在VB.NET中,使用RaiseEvent语句引发事件,格式如下所示:RaiseEvent
事件名([参数列])必须要在声明事件的类内引发事件。例如,子类不能引发从父类中继承的事件。举例说明,扩展Logger类,为其添加openFile、saveFile和closeFile方法,三个方法都会引发LogAction事件。PublicClassLogger
EventLogAction(ByValactionNameAsString)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交易策略优化与评估体系
- 2026云南欣捷供应链有限公司社会招聘4人备考题库附答案详解(能力提升)
- 衡水市2027届四上数学期末教学质量检测模拟试题含解析
- 2027届黄冈市蕲春县三上数学期末学业水平测试模拟试题含解析
- 2027届广东省深圳市福田区耀华小学数学四上期末考试模拟试题含解析
- 贵州省玉屏侗族自治县2027届四上数学期末经典试题含解析
- 厦门市同安区2027届数学四上期末质量检测模拟试题含解析
- 云计算在智慧银行架构优化
- 河南省新乡市2025-2026学年高二下学期7月天一大联考期末考试化学试题含答案
- 2026年叉车安全使用考试试题及答案
- 热敏性物料管理制度(3篇)
- 浅析如何做好人事档案管理工作
- 妊娠期静脉血栓形成的护理
- 红色广西课件
- 2024-2025学年广东省佛山市南海区桂城街道四年级(下)期末数学试卷
- 2025中煤新疆公司所属新能源公司面向中国中煤内外招聘技术人员6人考试参考题库及答案解析
- 中国历史文献学(第2版) 课件汇 第1-9课 绪论 -历史文献的阅读与检索
- 2025福建龙岩市“支企服务专员”招募10人考试参考题库附答案解析
- 江西省“振兴杯”多工序数控机床操作调整工竞赛考试题及答案
- 2025至2030年中国附子种植行业市场运行现状及未来发展预测报告
- 医学模式转变与健康理念
评论
0/150
提交评论