具有类对象参数

时间:2016-05-03 05:43:18

标签: c# visual-studio-2015

我正在使用C#和Visual Studio 2015。

我有两个班级BankAccount和Wallet。 Wallet类有一个调用BankAccount实例的传输方法。但是,在我发送这些参数时,在我的表单代码中,它不会从源和目标余额中提取资金。

转移方式:

public void TransferFund(BankAccount source, BankAccount destination, double amount)
{
    double Source = source.Balance;
    double Destination = destination.Balance;

    if (Source > amount)
    {

        Source -= amount;
        Destination += amount;

    }
    else
    {
        throw new ArgumentException("Insufficient funds for transfer.");
    }

}
单击表单按钮

                BankAccount from = lbTransferFrom.SelectedItem as BankAccount;
                BankAccount to = lbTransferFrom.SelectedItem as BankAccount;

                Wallet wall = new Wallet();
                double amount = Convert.ToDouble(tbAmount.Text);
                wall.TransferFund(from, to, amount);

问题:如何让源和目标对象实际更改余额?

1 个答案:

答案 0 :(得分:2)

这两行

double Source = source.Balance;
double Destination = destination.Balance;

.Balance的值复制到变量。在下文中,您将更改余额的副本的值,但您永远不会重新分配每个帐户的余额。而不是复制值只是做

if (source.Balance >= amount) {
    source.Balance -= amount;
    destination.Balance += amount;
} else {
    throw new ArgumentException("Insufficient funds for transfer.");
}

在C#中,您可以将值分成多个桶。值类型和引用类型。当您传递引用类型变量时,任何赋值或其他状态更改都将被所有引用("变量")反映到同一对象。每次将变量分配给另一个变量或将其作为参数传递时,使用值类型(大多数简单类型和所有结构)时,您将复制该值并传递副本。对副本的任何更改仅反映在该副本中,并且您经常会发现值类型实际上是不可变的,因此在您的情况下,作业double Source = source.BalanceSource -= amount都在创建副本并分配新创建的副本到Source变量

所有这一切都说我希望这是一个有趣的项目,而不是生产。如果不是,您需要一些交易逻辑和更合适的帐户模型