尝试使用方法添加,相信某些东西不是实例化的

Zor*_*oro 0 c#

当我输入文本框时,我希望它添加数字,相反,如果我输入(例如)12,再次点击存款,它只显示12.我认为这是因为它似乎认为它是0加12每次.有些东西似乎没有正确实例化.我认为.谁能指出我做错了什么?

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private void btn_deposit_Click(object sender, EventArgs e)
    {
        double input;
        input = double.Parse((putin.Text));
        BankAccount a = new BankAccount(input);
        aMtBox.Text = a.AccountBalance.ToString();
    }
}

public class BankAccount
{
    private double num1;
    private double accountBalance;

    public BankAccount(double input)
    {
        num1 = input;
        Deposit();
    }

    public double Num1
    {
        set {num1 = value;}
        get {return num1;}}

    public double AccountBalance
    {
        get {return accountBalance;}
        set {accountBalance = value;}}

    public void Deposit()
    {
        accountBalance = accountBalance + num1;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

BankAccount每次单击按钮时都会创建一个新实例- 因此accountBalance将为0.0(类型字段的默认值double).您是如何期望它"了解"之前的平衡?

完全有可能你的表单中应该有一个类型的实例变量BankAccount.您还应该考虑num1实例变量的BankAccount含义.这个名字当然没有告诉我们什么.感觉它实际上应该只是该Deposit方法的参数.

此外,对于您永远不应使用的货币值double- 使用或者decimal整数类型来表示分数(或便士,或其他).您不希望进入正常的二进制浮点问题.

此时,您的方法将变为:

// I hate the VS-generated event names, but...
private void btn_deposit_Click(object sender, EventArgs e)
{
    // TODO: Use decimal.TryParse, and handle invalid input cleanly.
    decimal newDeposit = decimal.Parse(putin.Text);
    account.Deposit(newDeposit);
    aMtBox.Text = account.AccountBalance.ToString();
}
Run Code Online (Sandbox Code Playgroud)