Переменная, не проходящая через класс
Я пытаюсь написать простую программу на Visual Basic, которая передает переменную через класс, вычисляет ее, а затем возвращает. Моя форма "Пицца" состоит из 2 групп по 3 радиокнопки в каждой. При нажатии кнопки "Итого" к размеру пиццы добавляется цена размера пиццы. Я обнаружил, что при устранении неполадок добавляется только "createPizza.Crust" + "createPizza.Size". Чего мне не хватает Спасибо за любую помощь.
Form "Pizza"
Public Class Pizza
Private Sub btnTotal_Click(sender As Object, e As EventArgs) Handles btnTotal.Click
If rThin.Checked = True Then
createPizza.Crust = 1
ElseIf rPan.Checked = True Then
createPizza.Crust = 2
ElseIf rStuff.Checked = True Then
createPizza.Crust = 3
End If
If rSm.Checked = True Then
createPizza.Size = 1
ElseIf rMm.Checked = True Then
createPizza.Size = 2
ElseIf rLg.Checked = True Then
createPizza.Size = 3
End If
lblTotal.Text = "Total: " + createPizza.PizTotal.ToString()
End Sub
End Class
Класс "createPizza"
Public Class createPizza
Public Shared Size As Double
Public Shared Crust As Double
Public Shared Property pizzaCrust As Double
Get
Return Crust
End Get
Set(ByVal crustpr As Double)
If Crust = 1 Then
crustpr = 1
ElseIf Crust = 2 Then
crustpr = 1.5
ElseIf Crust = 3 Then
crustpr = 3
End If
Crust = crustpr
End Set
End Property
Public Shared Property pizzaSize As Double
Get
Return Size
End Get
Set(ByVal sizepr As Double)
If Size = 1 Then
sizepr = 10.0
ElseIf Size = 2 Then
sizepr = 12.5
ElseIf Size = 3 Then
sizepr = 15
End If
Size = sizepr
End Set
End Property
Public Shared Function PizTotal() As Decimal
Return pizzaCrust + pizzaSize
End Function
End Class
2 ответа
Ваш PizTotal
функция только возвращается Size + Crust
потому что ваш pizzaSize
а также pizzaCrust
свойства возвращают значение Size
а также Crust
соответственно. Я вижу код, который вы должны рассчитать в настройках вашего имущества, но вы никогда не вызываете сеттеров для pizzaSize
а также pizzaCrust
поэтому стоимость никогда не рассчитывается.
Ваш pizzaSize
а также pizzaCrust
свойства не имеют большого смысла. Например, настройка свойства корки принимает в качестве входных данных цену, но если Crust
1, 2 или 3 сбрасывает цену, а затем сохраняет цену в Crust
переменная. Если вы написали следующую логику:
Dim p as New createPizza
p.Crust = 2
p.pizzaCrust = 12345678
Dim price1 As Double = p.pizzaCrust
p.pizzaCrust = 12345678
Dim price2 As Double = p.pizzaCrust
На price1
будет 1,5 а price2
будет 12345678, потому что оба pizzaCrust использует значение Crust
и модифицирует Crust
, Вы используете Crust
переменная как для типа корки, так и для цены на корку, а не для их различия. Вы должны хранить тип crust в одной переменной, а стоимость cust - в другой переменной (или лучше написать функцию, которая возвращает стоимость curst, основанную на типе crust 1,2 или 3).
Я обновил класс в соответствии с VBA.
Класс createPizza
Private Size As Double
Private Crust As Double
Public Function PizTotal() As Double
PizTotal = pizzaCrust + pizzaSize
End Function
Public Property Get pizzaCrust() As Double
pizzaCrust = Crust
End Property
Public Property Let pizzaCrust(ByVal vNewValue As Double)
Select Case vNewValue
Case 1
crustpr = 1
Case 2
crustpr = 1.5
Case 3
crustpr = 3
End Select
Crust = crustpr
End Property
Public Property Get pizzaSize() As Double
pizzaSize = Size
End Property
Public Property Let pizzaSize(ByVal vNewValue As Double)
Select Case vNewValue
Case 1
sizepr = 10#
Case 2
sizepr = 12.5
Case 3
sizepr = 15
End Select
Size = sizepr
End Property
Пример кодамодуля
Sub sample()
Dim a As New createPizza
a.pizzaCrust = 2
a.pizzaSize = 3
MsgBox a.PizTotal
End Sub