Переменная, не проходящая через класс

Я пытаюсь написать простую программу на 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
Другие вопросы по тегам