Я пытаюсь создать модуль класса, который принимает два аргумента, введенных пользователем, а затем выполнить вычисление для создания частного свойства, которое возвращает вычисленное значение
Вот что я получил до сих пор:
'clsItem Class Module
Option Explicit
Private mQt As Integer
Private mPrice As Double
Private mTotal As Double
Public Property Let Quantity(Value As Integer)
mQt = Value
End Property
Public Property Let Price(Value As Double)
mPrice = Value
End Property
Private Function SetTotal(mQt As Integer, mVl As Double)
mTotal = mQt * mPrice
End Function
Public Property Get Quantity() As Integer
Quantity = mQt
End Property
Public Property Get Price() As Double
Price = mPrice
End Property
Public Property Get Total() As Double
SetTotal mQt, mPrice 'This smells
Total = mTotal
End Property
Часть, где я прокомментировал This smells
, - это кладжа, которую я поставил, поэтому приведенный ниже код дает ожидаемое поведение:
'Object Module
Sub TestCls()
Dim basicItem As clsItem
Set basicItem = New clsItem
With basicItem
.Quantity = 100
.Price = 12.5
End With
Debug.Print basicItem.Total
End Sub
Я думаю, что это неправильно, потому что
- Я использую свойство get для вызова функции, но я не могу найти способ разместить этот вызов где-либо еще в коде.
- Если я не сделаю 'Вызов
clsItem.Total
где-то в модуле mTotal
никогда не обновится.
Я пытался использовать Class_Initialize()
, но он дает 0
, поскольку .Quantity
и .Price
не являютсяперешел в класс еще.
Так, как я могу сделать это правильно?