1

だから私は自分のクラスのプロジェクトをやっていて、レジを作るためにクラスを書かなければなりません。Add と Subtract の 2 つのボタンを備えた単純なレジスタです。最初のテキスト ボックスに必要な金額を入力すると、2 番目のテキスト ボックスに結果が表示されます。私はクラスで働いたことがなく、それに伴う専門用語のほとんどを理解していないので、ばかげた答えは素晴らしいでしょう! これは私がこれまでに持っているコードです:

Public Class frmRegister

    Dim reg As CashRegister
    Structure Equations
        Dim Amount As Double
        Dim Balance As Double
    End Structure
    Class CashRegister
        Private xAmount As Double
        Private xBalance As Double

        Public Property Amount As Double
            Get
                Return xAmount
            End Get
            Set(ByVal value As Double)
                xAmount = value
            End Set
        End Property
        Public Property Balance As Double
            Get
                Return xBalance
            End Get
            Set(ByVal value As Double)
                xBalance = value
            End Set
        End Property
        Function calc_sum() As Double
            Dim AddMethod As Double
            AddMethod = xBalance + xAmount
            Return AddMethod
        End Function
        Function calc_sub() As Double
            Dim SubtractMethod As Double
            SubtractMethod = xBalance - xAmount
            Return SubtractMethod
        End Function
    End Class

    Private Sub frmRegister_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If txtBalance.Text = "" Then
            txtBalance.Text = "0"
        End If
    End Sub
    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        reg.Amount = txtAmount.Text
        reg.Balance = txtBalance.Text
        txtBalance.Text = FormatCurrency(reg.calc_sum)
    End Sub

    Private Sub btnSubtract_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubtract.Click
        reg.Amount = txtAmount.Text
        reg.Balance = txtBalance.Text
        txtBalance.Text = FormatCurrency(reg.calc_sub)
        If txtBalance.Text < 0 Then
            MessageBox.Show("Transaction Cannot Result in Negative Balance!")
            txtBalance.Text = "0"
        End If

    End Sub

End Class

ボタンにアクセスしてtxtboxを参照すると、問題が発生します。彼らは txtAmount.text に下線を引き、null 参照例外が処理されなかったと言います。私は何を間違っていますか。それはどのようにヌルですか?前に cdbl を追加しようとしましたが、違いはありません

4

2 に答える 2

1

reg変数はそのNothingため、メソッドを呼び出すことはできません。その型の変数を作成するとすぐに構造が存在する構造とは異なり、クラスでは明示的にクラスを夢中にする必要があります。これを修正する最善の方法は、 に追加するreg = new CashRegister()ことfrmRegister_Loadです。

この理由は、構造体は変数に直接格納されますが、クラスはインスタンスへの参照であり、変数がインスタンスを指さないことは有効ですが、変数が何かを含まないことは有効ではないためです。

構造体の場合、メモリはこのようにスタックに直接格納されます

Equations
Amount
Balance

そのため、変数が存在するためのスペースとして変数が存在する必要があります。

クラスの場合、変数にはヒープ内のクラスの場所が含まれているだけなので、変数が指すように new を使用してインスタンスを作成する必要があります。

于 2013-05-03T21:02:47.770 に答える