我对Visual Basic 6.0并不熟悉,并且没有安装VB编译器,但我正在查看一些VB代码进行一些调试,并看到了这一点:
Private Function IsFieldDeleted(oLayoutField As Object)
Dim oColl As Collection
Set oColl = GetFieldIdsForField(oLayoutField)
IsFieldDeleted = (oColl.Count = 0)
Set oColl = Nothing
End Function
在其他函数中,我看到它们定义了带有“As”的返回类型,例如“As Boolean”,但是这个没有“As”:D然后他们如何使用它是这样的:
If Not IsFieldDeleted(oRptField.GetUCMRLayoutField) Then
Call oCollection.Add(oRptField, oRptField.ObjectKeyString)
Call AddToNewLineSeperatedString(sCaseFldDescMsg, oFld.FieldDescription)
End If
这是如何工作的?是否就像重写它并说该函数返回一个整数并将返回类型比较为0或1?或者还有其他隐藏的提示吗?
答案 0 :(得分:4)
如果未指定类型,则在VB.NET中,它假定返回类型为Object
。在VB6中,它假定为Variant
。在VB.NET中,你可以通过转动Option Strict On
使事情变得更加明显,但我不相信VB6中有这个选项。
实际上,返回的值仍然是Boolean
,但您将返回的值视为Variant
。所以,要“正确”地做到这一点,你真的应该像这样投出返回值:
If Not CBool(IsFieldDeleted(oRptField.GetUCMRLayoutField)) Then
....
End If
调用CBool
会将值转换为Boolean
而不是Variant
。但这是不必要的,因为VB将使用后期绑定来确定返回值的类型是一个布尔值。
在这种情况下,最好的办法是将功能更改为As Boolean
。这样做不会破坏任何现有代码,因为无论如何它都会返回。但是,如果它是DLL中的公共成员,则会破坏兼容性。