Overrides和Overloads

本文深入解析了VB.NET中的方法重写和重载概念,详细阐述了两者的基本原理、关键字使用以及实际应用。重写涉及OverRidable、OverRides、MustOverRide和NotOverridable等关键字,而重载则通过Overloads关键字实现同一类中名称相同但参数不同的方法。文章还提供了示例代码以辅助理解。

   

    首先明白这两个词的基本意思:顾名思义Overrides重写,Overloads重载

方法的重写和重载是面向对象中多态的两种表现形式,不同的是重写是父类和子类之间的多态性,不同的子类继承一个基类,以实现自己不同的业务逻辑,这要求子类的方法名称及参数必须与父类完全一致。 重载是一个类中的多态性,重载多个名称相同的方法,相同的方法名,不同的实现。

关键字

重写:

    VB.NET 中,重写汲及到的关键字有:

    OverRidable: 在父类中声明的可以在子类中重写的方法。

    OverRides: 在子类中声明的要重写父亲中可重写的方法。

    MustOverRide: 在父类中,表示这个方法必须在子类中重写。此时,该类必须声明为抽象类。

    NotOverridable: 如果当前类还有子类,那么,在其子类中,该方法不允许被重写。

重载:

    VB.NET 中,重载用到的关键是 OverLoads。请看如下代码:

    Public Sub ShowMySelf(ByVal Name As String)

    Public Sub ShowMySelf(ByVal Name As String, ByVal Age As Integer)

    Public Sub ShowMySelf(ByVal Name As String, ByVal Age As Integer, ByVal Sex AsString)

 

    Public Overloads Function GetMyInfo() As String

    Public Overloads Function GetMyInfo(ByVal MyID As Integer) As String

    对于重载

    1. 对于在同一类当中,一组名称相同的方法或函数重载时,可以加关键字 OverLoads 或者不加。但如果其中有一个方法加上,那同组其它方法也必须加该关键字。

    2. 如果该方法是重载父类中的方法。那么必须加OverLoads 关键字。

    3. 如果两个同名函数仅返回类型不相同,则它们不能重载,即必须在参数上有所不同。


<think>好的,我现在需要帮助用户对比VB6.0VB.NET的语法差异。用户之前已经提过这个问题,现在需要更详细的对比。首先,我得回顾一下之前提供的引用内容,尤其是引用[1]、[2]、[4],因为它们提到了内核变化、面向对象差异以及具体语法例子。 首先,用户需要的是语法层面的对比,所以应该从变量声明、函数定义、错误处理、面向对象特性等方面入手。例如,引用[2]提到VB.NET是完全面向对象的,这意味着它在类、继承等方面有根本的不同。引用[4]中的例子显示VB.NET使用Public Overrides Function这样的语法,而VB6.0可能没有这样的结构。 接下来,变量声明方面,VB6.0可能使用旧的方式,比如Dim x As Integer,而VB.NET可能引入了新的关键字如Dim类型推断。错误处理方面,VB6.0用On Error Goto,而VB.NET可能用Try...Catch结构,这点需要确认。 另外,数据类型的变化也是重点,比如VB6.0的Integer是16位,而VB.NET可能改为32位,同时引入新的类型如Char。字符串处理方面,VB.NET可能使用&符号,而VB6.0用+,不过需要核实是否正确,因为可能存在变化。 还有,事件处理在VB6.0中使用Handles关键字,而VB.NET可能有所不同吗?或者是否有新的语法?比如,VB.NET中的事件处理更符合.NET框架的标准,比如使用AddHandler。 然后,API调用方面,VB6.0使用Declare语句,而VB.NET可能需要使用DllImport属性,这也是语法上的差异。 需要确保每个对比点都有明确的例子,比如函数定义的例子,错误处理的代码片段。同时,要参考提供的引用内容,特别是引用[4]中的函数示例,展示VB.NET的语法结构。 最后,生成相关问题时,要涵盖版本迁移、选择建议、常见错误等,帮助用户进一步探索。需要检查是否有遗漏的重要语法差异,比如属性声明、接口实现等。确保回答结构清晰,分点说明,每个差异点都有具体示例,符合用户要求的中文回答,并且正确应用LaTeX格式。</think>VB6.0 与 VB.NET 的语法差异对比(按核心功能分类) 1. **变量声明与作用域** - VB6.0:强制显式声明需用 `Option Explicit`,变量作用域用 `Dim/Private/Public` ```vb Dim x As Integer '模块级变量需在顶部声明 ``` - VB.NET:支持类型推断块级作用域 ```vb Dim y = 5 '自动推断为Integer If True Then Dim z As String = "block scope" '块级作用域 End If ``` 2. **函数/方法定义** - VB6.0:使用 `Function/Sub` 无访问修饰符 ```vb Public Function Add(a As Integer, b As Integer) Add = a + b End Function ``` - VB.NET:支持重载、返回值直接赋值 ```vb Public Overloads Function Add(x As Integer, y As Integer) As Integer Return x + y End Function ``` 3. **错误处理机制** - VB6.0:`On Error GoTo` 结构 ```vb On Error GoTo ErrorHandler '...代码... Exit Sub ErrorHandler: MsgBox Err.Description ``` - VB.NET:结构化异常处理 `Try...Catch` ```vb Try '...代码... Catch ex As Exception MessageBox.Show(ex.Message) Finally '清理代码 End Try ``` 4. **面向对象特性** - VB6.0:伪面向对象(无继承) ```vb '只能实现接口(Implements) ``` - VB.NET:完全面向对象(支持继承/多态) ```vb Inherits BaseClass Overrides Sub Method() '重写基类方法 End Sub ``` 5. **数据类型升级** | 类型 | VB6.0 | VB.NET | |------------|------------|-----------------| | 整数 | Integer(16位) | Short(16位) | | 长整型 | Long(32位) | Integer(32位) | | 字符串处理 | 固定长度字符串 | 动态StringBuilder[^4] | 6. **API调用方式** - VB6.0:`Declare` 直接调用 ```vb Declare Function MessageBox Lib "user32" Alias "MessageBoxA" _ (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long ``` - VB.NET:需通过 `DllImport` 特性 ```vb <DllImport("user32.dll")> Public Shared Function MessageBox(hWnd As IntPtr, text As String, caption As String, type As Integer) As Integer End Function ``` 7. **事件处理改进** - VB6.0:`WithEvents` + 固定命名 ```vb WithEvents btn As CommandButton Private Sub btn_Click() '事件处理 End Sub ``` - VB.NET:灵活的事件绑定 ```vb AddHandler btn.Click, AddressOf Button_Click Sub Button_Click(sender As Object, e As EventArgs) '事件处理 End Sub ```
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值