1

我正在尝试在 VB6 中重新创建以下 C# 代码:

private void ChangeTab(string tabName, bool clearAll = true)
{
    Yadyyada(tabName);

    if (clearAll)
    {
        DoMoreStuff();
    }
}

这是我到目前为止所拥有的:

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean)

    Yadyyada(tabName)

    If clearAll = True Then
        DoMoreStuff
    End If

End Sub

到目前为止,除了默认参数外还不错。clearAll我可以像在 C# 中一样在方法签名中分配默认值 true 还是只需要在方法开始时执行此操作?

谢谢

4

4 回答 4

9

哇,这让我回来了..我能问一下你为什么要在技术方面向后转换吗?

无论如何,您可以使用 Optional 关键字:

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean = True)

您的问题是使用 ByVal。根据记忆,除非明确说明,否则 VB6 中的所有内容都是 ByVal。

编辑:我错了。默认是 ByRef.. 已经很久了!

于 2012-08-08T12:13:49.490 回答
4

是的,你可以做与 C# 相同的事情

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean = True) 
    Debug.Print "Value for clearAll=" & clearAll
End Sub

打电话给

ChangeTab("AName")

将打印 True

于 2012-08-08T12:15:06.053 回答
2

尝试:

Private Sub ChangeTab(ByVal tabName As String, Optional clearAll As Boolean = True)

    Call Yadyyada(tabName)

    If clearAll Then
        DoMoreStuff
    End If

End Sub

请参阅http://msdn.microsoft.com/en-us/library/aa266305%28v=vs.60%29.aspx

于 2012-08-08T12:14:41.747 回答
0

您可以像这样使用 IsMissing 函数

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean)

    Yadyyada(tabName)

    If IsMissing(clearAll) = True Or clearAll = True Then
        DoMoreStuff
    End If

End Sub

我的错!为可选参数设置默认的真值并在代码中检查是最好的解决方案!

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean = True)

    Yadyyada(tabName)

    If clearAll = True Then
        DoMoreStuff
    End If

End Sub
于 2012-08-08T12:18:08.520 回答