VB中没有返回类型的函数

时间:2012-12-12 21:27:15

标签: vb.net vb6

我对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?或者还有其他隐藏的提示吗?

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中的公共成员,则会破坏兼容性。