2013-05-03 2 views
1

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

ответ

0

Ваш PizTotal функция возвращает только Size + Crust, потому что ваши pizzaSize и pizzaCrust свойства возвращают значение Size и Crust отношении ively. Я могу видеть код, который вам нужно рассчитать затраты в настройках вашего имущества, но вы никогда не называете сеттеры для pizzaSize и pizzaCrust, поэтому стоимость никогда не рассчитывается.

Ваши pizzaSize и pizzaCrust свойства не имеют большого смысла. Например, значение свойства crust принимает в качестве входной цены, но если 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 как для типа коры, так и для коры и не различаете их. Вы должны хранить тип коры в одной переменной и стоимость сдерживания в другой переменной (или лучше просто написать функцию, которая возвращает стоимость корней на основе типа коры 1,2 или 3).

+0

IntelliSense превратили его в 'Dim р As New createPizza createPizza.Crust = 2 createPizza.pizzaCrust = 12345678 Dim price1 As Double = createPizza.pizzaCrust createPizza.pizzaCrust = 12345678 Dim price2 As Double = createPizza.pizzaCrust ' Не обходите это полностью« pizzaCrust »и« pizzaSize »? – rpcob

0

Я обновил класс костюм для 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