Способен вызывать свойство Let / Get динамически, или каждому свойству нужен свой собственный fcn? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть класс Excel VBA с приблизительно 30 различающимися свойствами, и я надеялся избежать написания функции Get / Let для каждого из них, есть ли способ динамической передачи свойства и значения?

псевдокод будет выглядеть примерно так:

Private strID As String
Private dblAmt As Double
Private dtMatDate As Date

Property Get PropertyName(arg1)
    [get value for whatever Property arg1 represents]
End Property

Property Let PropertyName(arg1,arg2)
    [set value for Property arg1 to value of arg2]
End Property

1 Ответ

0 голосов
/ 01 ноября 2019

Если бы вы собирали все частные свойства в частную коллекцию, используя ключ при инициализации, то вы могли бы использовать ключ для доступа к значению частного свойства. Имейте в виду, что вы ослабляете свою типизацию, и нет никакого реального способа гарантировать, что вы передадите правильную строку arg1, чтобы получить член коллекции с этим подходом. YMMV

Private strID As String
Private dblAmt As Double
Private dtMatDate As Date
Private myProperties As Collection

Private Sub Class_Initialize()
    Set myProperties = New Collection
    With myProperties
        .Add strID, "ID"
        .Add dblAmt, Key:="Amount"
        .Add dtMatDate, Key:="MatDate"
    End With
End Sub

Private Sub Class_Terminate()
    Set myProperties = Nothing
End Sub
Property Get PropertyValue(ByVal arg1 As String) As Variant
    PropertyValue = myProperties(arg1)
End Property

Property Let PropertyValue(ByVal arg1 As String, ByVal arg2 As Variant)
    myProperties(arg1) = arg2
End Property
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...