Как улучшить это определение модуля класса - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь создать модуль класса, который принимает два аргумента, введенных пользователем, а затем выполнить вычисление для создания частного свойства, которое возвращает вычисленное значение

Вот что я получил до сих пор:

'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

Я думаю, что это неправильно, потому что

  1. Я использую свойство get для вызова функции, но я не могу найти способ разместить этот вызов где-либо еще в коде.
  2. Если я не сделаю 'Вызов clsItem.Total где-то в модуле mTotal никогда не обновится.

Я пытался использовать Class_Initialize(), но он дает 0, поскольку .Quantity и .Price не являютсяперешел в класс еще.

Так, как я могу сделать это правильно?

1 Ответ

0 голосов
/ 11 декабря 2018
  1. Удалите SetTotal
  2. Просто подсчитайте сумму в вашем Get Total()

Таким образом, вы получите

'clsItem Class Module
Option Explicit

Private mQt As Integer
Private mPrice As Double

Public Property Let Quantity(Value As Integer)
    mQt = Value
End Property

Public Property Get Quantity() As Integer
    Quantity = mQt
End Property


Public Property Let Price(Value As Double)
    mPrice = Value
End Property

Public Property Get Price() As Double
    Price = mPrice    
End Property


Public Property Get Total() As Double
    Total = mQt * mPrice
End Property
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...