修改派生类

时间:2015-08-22 17:40:27

标签: c#

我环顾四周但找不到我问题的具体答案。

这是我感兴趣的抽象类帐户的一部分:

 public abstract class Account
 {

 private decimal balance;

 public decimal Balance
    {
        get
        {
            return this.balance;
        }
        protected set
        {
            if (value < 0)
            {
                throw new ArgumentException("Balance can't be negative");
            }
            balance = value;
        }
    }
 protected Account(decimal balance)
    {
        this.Balance = balance;
    }
 }

现在我有一个名为DepositAccount的派生类,它使用Balance属性工作,使用IWithdraw接口的Withdraw()方法。

public class DepositAccount : Account, IWithdraw
    {
        public DepositAccount(decimal balance)
            : base(balance)
        {

        }
        public void Withdraw(decimal amount)
        {
            if (amount > this.Balance)
            {
                throw new ArgumentException("Not enough balance!");
            }
            this.Balance -= Balance;
        }
    }

我的问题是如何在基础帐户类中最好地实现Balance属性?

我只想要派生类(那些能够提取或存钱的帐户)才能修改它(因此受保护的集合)。

我应该将属性设置为受保护而不是公共或仅保留setter吗?

1 个答案:

答案 0 :(得分:1)

属性是语法糖,使访问器更容易和更优雅地实现,但它们仍然可以编译成常规方法。

如果您要讨论方法而不是属性,您将如何解决问题?我想你会以相同的解决方案结束:修改Balance的内容会受到保护,并且检索其值将是public

如果您想公开访问Balance,请保留public,否则请使用protected