3

我对 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?或者那里还有其他隐藏的技巧?

4

1 回答 1

4

当没有指定类型时,在 VB.NET 中它假定Object返回类型。在 VB6 中,它假定Variant. 在 VB.NET 中,您可以通过 turn 使事情变得更加明显Option Strict On,但我不相信该选项在 VB6 中可用。

实际上,返回的值仍被键入为 a Boolean,但您将返回的值视为 a Variant。所以,要“正确”地做到这一点,你真的应该像这样转换返回值:

If Not CBool(IsFieldDeleted(oRptField.GetUCMRLayoutField)) Then
   ....
End If

调用CBool将值转换为 aBoolean而不是 a Variant。但是,这是不必要的,因为 VB 将使用后期绑定来确定返回值的类型是布尔值。

在这种情况下,最好的办法是将函数更改为As Boolean. 这样做不会破坏任何现有代码,因为这就是它曾经返回的全部内容。但是,如果它是 DLL 中的公共成员,则会破坏兼容性。

于 2012-12-12T21:31:08.520 回答