重载属性

时间:2011-03-09 19:58:35

标签: vba syntax properties vb6 overloading

我试图在类模块中重载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方法有什么好处呢?

4 个答案:

答案 0 :(得分:2)

您可以使用变体或对象类型并手动处理类型检查吗?

可选参数的混合也是可能的,但它并不完全等同于重载。

答案 1 :(得分:1)

从我在这里看到的:

http://vbcity.com/forums/t/76453.aspx

在你转换为VB.NET之前,似乎你运气不好。

答案 2 :(得分:1)

这个主题有一个主题:

Function Overloading and UDF in Excel VBA

答案 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