1

プロパティの値を設定しようとしているので、アカウントが引き落とされた場合、10 の手数料が請求されます。プロパティ CurrentBalance を debit(10)、value -10、accountbalance-10 などのさまざまな方法でコーディングしようとしましたが、これらの方法はどれも機能しません。コードはコンパイルされますが、料金はかかりません。私は何を間違っていますか?

    public void Credit(decimal amount)
    {
        accountBalance += amount; //add to balance
    }

    public void Debit(decimal amount)
    {
        accountBalance -= amount; //subtract amount
    }

    public decimal CurrentBalance
    {
        get
        {
            return accountBalance;
        }
        set
        {
            if (value < 0) // if less than zero debit account by 10
            {
              value = accountBalance -10; // charge account
            }
            accountBalance = value;
        }
    }
4

3 に答える 3

5

これは、あなたが望むものを達成するためのより良い方法になります:

public void Credit(decimal amount)
{
    accountBalance += amount; //add to balance
}

public void Debit(decimal amount)
{
    accountBalance -= amount; //subtract amount
    if(accountBalance < 0)
    {
        accountBalance -= 10;
    }
}

//make this a readonly property and use the debit and credit functions to adjust it
public decimal CurrentBalance
{
    get
    {
        return accountBalance;
    }
}
于 2013-04-13T13:02:57.130 に答える
3

コードを次のように変更することで修正できます

set
{
    if (value < 0) // if less than zero debit account by 10
    {
        accountBalance = value -10; // charge account
    } else {
        accountBalance = value;
    }
}

accountBalanceただし、現在の値が破棄されるため、新しい値を提供するセッターでこれを行うことはお勧めできません。次のように、現在の値を調整する関数で実行することをお勧めします。

public decimal AdjustBy(decimal amount) {
    accountBalance += amount;
    if (accountBalance < 0 && amount < 0) {
        // Charge fees on withdrawals when the resultant balance is < 0
        accountBalance -= 10;
    }
}
于 2013-04-13T12:55:31.193 に答える