为什么我的递归好友功能在VB6中不起作用?

埃里克·达伦(Erik Dahlen)

我在VB6中有一个递归函数,并且我希望该函数成为一个朋友函数,所以我无法从任何地方访问它,但是它不起作用。它只会说该对象不存在,如果我将功能更改为公共功能,它将起作用。为什么?我是否误解了朋友功能的工作方式?

代码如下:

Friend Function TestFunction() As Boolean
On Error GoTo ErrHandler

  TestFunction= False

  If Me.Works Then
    TestFunction= True
  End If

  If TestFunction = False And Me.HaveChild = True Then
    Dim objClass
    For Each objClass In Me.colChild 
      If objClass.TestFunction = True Then 'I get the break here, due to missing object
        TestFunction = True
        Exit For
      End If
    Next
  End If

  Exit Function

ErrHandler:
  Call LogError()
End Function

如果我只是将功能更改为公开功能,它将起作用,有人可以解释原因吗?

djv

它不仅限于递归。这是一个最小的示例,它显示了没有递归的相同行为。

Option Explicit

Private Sub Form_Load()
    Dim objClass
    Set objClass = Me
    ' OK
    objClass.TestPublicFunction
    ' Run-time error '438': Object doesn't support this property or method
    objClass.TestFriendFunction
    End
End Sub

Public Sub TestPublicFunction()
    MsgBox "In public!"
End Sub

Friend Sub TestFriendFunction()
    MsgBox "In friend!"
End Sub

原因是即使在同一项目中,也不能在后期绑定的对象上调用Friend属性和方法。看到这篇MSDN文章

重要说明:由于Friend成员不是对象公共接口的一部分,因此不能后期绑定(即,通过声明为Object的变量)访问它们。要使用Friend成员,必须声明具有早期绑定的变量,即As类名。

因此,实际上,您应该能够通过显式声明每个循环迭代器而不是隐式使用Variant来修复代码。

Dim objClass As ClassName
For Each objClass In Me.colChild 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么此箭头功能在IE 11中不起作用?

为什么窗口功能在CROSS APPLY中不起作用?

为什么我的递归不起作用?

为什么复制功能在setTimeout中不起作用?

Python:为什么我的写入功能在while循环中不起作用?

为什么我不能在VB6 TextBox中拆分从Android收到的文本行

为什么此递归打印功能在Erlang中不起作用

为什么箭头功能在电子引用的脚本中不起作用?

为什么下一个功能在我的R Studio中不起作用

为什么我的路由器导航功能在角度8中不起作用?

为什么删除功能在蜂巢壳中不起作用?

为什么我的反跳功能在带有钩子的React应用程序中不起作用?

为什么GOTO功能在BASIC中不起作用?

为什么vscode自动完成功能在js函数中不起作用?

为什么当我使用延迟功能延迟$ {document).ready时,我的延迟功能在Jquery中不起作用?帮帮我

为什么此功能在runghc中起作用而在ghci中不起作用?

为什么我的除数功能在某些情况下不起作用?

中断功能在Python 3.5中不起作用!我不知道为什么。我需要建议

为什么递归生成器功能在ES2015中不起作用?

为什么我的独特功能在Oracle中不起作用?

不知道为什么我的循环功能在这里不起作用

为什么查找功能在 BeautifulSoup 中不起作用?

为什么删除功能在我的 jsp 文件中不起作用?

为什么 onpress 功能在本机反应中不起作用

为什么我的喷枪功能在 pygame 中不起作用?

为什么此功能在 Safari 中不起作用?(在 Chrome 中工作正常)

为什么搜索功能在 Django 中不起作用?

为什么我的删除功能在我的桌子上不起作用

为什么 onclick 功能在我的 Vue 应用程序中不起作用?