我正在尝试在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
除了默认参数外,到目前为止一直很好。我可以像在C#中一样在方法签名中为clearAll
分配默认值true,还是只需要在方法开头执行此操作?
由于
答案 0 :(得分:9)
无论如何,您可以使用Optional关键字:
Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean = True)
您的问题是使用ByVal。从内存来看,除非明确说明,否则VB6中的所有内容都是ByVal。
编辑:我错了。默认是ByRef ..它已经很久了!答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分: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