如何重载内置的vb.net函数

时间:2017-01-24 19:49:10

标签: vb.net override overloading

我想重载VB.Net中的内置MsgBox()函数。

我希望每次弹出一个MsgBox时都会发出一声蜂鸣声,但不想创建一个新函数,例如MsgBoxWithBeep(),并在我现有的代码中执行一大堆查找/替换。

我可以在一个模块中做到这一点:

Public Sub MsgBox(msg As String)
    Beep()
    MsgBox(msg)
End Sub

但当然这最终会成为一个无休止的递归循环。

我不能MyBase.MsgBox(),因为这不是一个班级。

是否存在所有内置函数都使用的假设类,因此我可以执行VbNetBaseClass.MsgBox()之类的操作或其他方式返回原始函数?

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案就是使用MsgBox来调用MessageBox.Show,如下所示:

Public Sub MsgBox(msg As String)
    Beep()
    MessageBox.Show(msg, Me.Text, MessageBoxButtons.OK)
End Sub

或者更好的是,使用已经发出哔哔声的感叹号/错误图标:

Public Sub MsgBox(msg As String)
    MessageBox.Show(msg, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Sub

_

  

编辑:黑木的好点......如果你需要结果,你可以把它变成一个函数:

Public Function MsgBox(msg As String, _
                       Optional title As String = "", _
                       Optional msgButtons As MessageBoxButtons = MessageBoxButtons.OK, _
                       Optional msgIcon As MessageBoxIcon = MessageBoxIcon.None) _
                   As System.Windows.Forms.DialogResult
    Return MessageBox.Show(msg, title, msgButtons, msgIcon)
End Function

答案 1 :(得分:0)

我不相信您能够覆盖或重载MsgBox()方法,因为它是static和标准模块(而不是类){{ 3}}:

[StandardModule]
public sealed class Interaction
{
    /* Other methods omitted for brevity */

    public static MsgBoxResult MsgBox(object Prompt, MsgBoxStyle Buttons = MsgBoxStyle.ApplicationModal, object Title = null);
}

您最好的选择是编写自己的方法或包装器来处理使用可选的重载等来调用它。