Свойства перегрузки - PullRequest
3 голосов
/ 09 марта 2011

Я пытался перегрузить в 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 ]

2 голосов
/ 09 марта 2011

Можете ли вы использовать вариант или тип объекта и вручную обрабатывать проверку типа?

Может быть возможна комбинация необязательных параметров, но она не совсем эквивалентна перегрузке.

1 голос
/ 11 марта 2011

Нет.

Обходной путь - использовать варианты, которые позволяют клиенту передавать все.Но вы должны написать код для проверки типов во время выполнения:

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

Подробнее см. В превосходной книге Дэна Эпплмана Разработка компонентов COM / ActiveX в Visual Basic 6 .

1 голос
/ 09 марта 2011

По этой теме была тема:

Перегрузка функций и UDF в Excel VBA

1 голос
/ 09 марта 2011

Из того, что я вижу здесь:

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

Похоже, вам не повезло, пока вы не перешли на VB.NET.

...