为什么我的递归友元函数不能在VB6中工作?
我在VB6中有一个递归函数,我希望该函数是一个朋友函数,因此我无法从任何地方访问它,但它不起作用。它只会说对象不存在,如果我将函数更改为公共函数,它将工作。为什么?我是否误解了friend函数的工作原理 代码如下所示:为什么我的递归友元函数不能在VB6中工作?,vb6,friend-function,Vb6,Friend Function,我在VB6中有一个递归函数,我希望该函数是一个朋友函数,因此我无法从任何地方访问它,但它不起作用。它只会说对象不存在,如果我将函数更改为公共函数,它将工作。为什么?我是否误解了friend函数的工作原理 代码如下所示: Friend Function TestFunction() As Boolean On Error GoTo ErrHandler TestFunction= False If Me.Works Then TestFunction= True End I
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
如果我只是将函数更改为公共函数,它会工作,有人能解释一下原因吗?它不仅限于递归。下面是一个最小的示例,它显示了没有递归的相同行为
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
原因是不能对后期绑定的对象调用友元属性和方法,即使在同一个项目中也是如此。见:
重要因为朋友成员不是对象的公共对象的一部分
接口,它们不能被后期绑定访问-也就是说,通过
声明为对象的变量。若要使用好友成员,必须声明
具有早期绑定的变量-即,作为类名
因此,实际上,您应该能够通过显式声明for-each循环迭代器来修复代码,而不是隐式使用变量
Dim objClass As ClassName
For Each objClass In Me.colChild
它不仅限于递归。下面是一个最小的示例,它显示了没有递归的相同行为
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
原因是不能对后期绑定的对象调用友元属性和方法,即使在同一个项目中也是如此。见:
重要,因为好友成员不是对象的公共成员
接口,它们不能被后期绑定访问-也就是说,通过
声明为对象的变量。若要使用好友成员,必须声明
具有早期绑定的变量-即,作为类名
因此,实际上,您应该能够通过显式声明for-each循环迭代器来修复代码,而不是隐式使用变量
Dim objClass As ClassName
For Each objClass In Me.colChild
什么是colChild?定义TestFunction类型的对象集合?是的,它是类对象的集合。什么是colChild?定义TestFunction类型的对象集合?是的,它是类对象的集合。实际上,他使用的是隐式创建的
变量
,而不是对象
——但是除了额外的开销之外,没有什么区别。是的,我在.net中呆的时间太长了。修正了。实际上他在那里使用了一个隐式创建的变量,而不是对象
——但是除了额外的开销之外,没有什么区别。对了,我在.net中呆的时间太长了。固定的。