我试图在类模块中重载VBA:
Dim a As Integer
Public Property Let SomeNumber(newNumber as Integer)
a = newNumber
End Property
Public Property Let SomeNumber(newNumber as String)
a = Val(newNumber)
End Property
Public Property Get SomeNumber() As Integer
SomeNumber = a
End Property
编译器抱怨“检测到一个含糊不清的名字”,显然有一个不同的签名。是否可以在VBA或VB6中重载类中定义的属性?如果是这样,语法是什么?
此外,如果无法进行属性重载,那么除了以更无缝的方式访问实例化对象的字段之外,属性对公共函数定义的get / set方法有什么好处呢?
答案 0 :(得分:2)
您可以使用变体或对象类型并手动处理类型检查吗?
可选参数的混合也是可能的,但它并不完全等同于重载。
答案 1 :(得分:1)
答案 2 :(得分:1)
这个主题有一个主题:
答案 3 :(得分:1)
没有
解决方法是使用Variants,它允许客户端传递任何内容。但是你必须编写代码来在运行时进行类型检查:
Public Property Let SomeNumber(newNumber as Variant)
Select Case VarType(newNumber)
Case vbInteger '' Caller passed an integer
a = newNumber
Case vbString '' Caller passed a string
a = Val(newNumber)
Case Else
Err.Raise vbObjectError+513, , "Invalid type passed"
End Select
End Property
Public Property Get SomeNumber() As Variant
SomeNumber = a
End Property
有关详细信息,请参阅Dan Appleman的优秀书籍Developing COM/ActiveX Components In Visual Basic 6。