当我输入文本框时,我希望它添加数字,相反,如果我输入(例如)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)
您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)