【发布时间】:2011-02-11 13:23:07
【问题描述】:
我创建了两个类作为接口/实现类,并希望将一个类的特定示例传递给另一个类的方法。定义如下...
类 BigInt...
Option Explicit
Public Sub dothing(ByRef passed_object As MyInt)
End Sub
还有一个实现 BigImplementation...
Option Explicit
Implements BigInt
Public Sub BigInt_dothing(ByRef passed_obj As MyInt)
Dim i As Integer
i = passed_obj.getprop
End Sub
我打算通过的课程是……
Option Explicit
Public Property Get getprop() As Integer
End Property
Public Property Let letprop(ByVal myval As Integer)
End Property
因此实现为 MyImplementation...
Option Explicit
Implements MyInt
Private myval As Integer
Public Property Get myint_getprop() As Integer
myint_getprop = myval
End Property
Public Property Let myint_letprop(ByVal passed_int As Integer)
myval = passed_int
End Property
然后我使用以下 sn-p 代码来驱动它:-
Private Sub Command_Click()
Dim myobj As MyInt
Set myobj = New MyImplementation
Dim mybigobj As BigInt
Set mybigobj = New BigImplementation
myobj.letprop = 1
Call mysub(myobj)
mybigobj.dothing (myobj) ' Line with problem
End Sub
Private Sub mysub(ByVal passed_obj As MyInt)
Dim i As Integer
i = passed_obj.getprop
End Sub
当执行到达标记的行时,我得到运行时错误 438 - 对象不支持属性或方法。对普通函数 mysub 的调用完美无缺。有谁知道我做错了什么以及我需要做些什么来解决这个问题?
【问题讨论】:
-
您的参数都不需要是
ByRef,我个人会发现它们具有误导性,例如我的调用代码必须在调用后测试我通过ByRef的引用是否指向不同的对象。但如果是ByVal,我将能够信任被调用者。 -
@onedaywhen,好点;谢谢你。