C# 定义和实现接口(小例子)

下面开发一个遵循接口继承的小例子来说明如何定义和使用。

假设这个例子建立在银行账户的基础上。 假定编写代码,表示银行账户的所有类都实现接口 IBankAccount. 该接口包含一个用于存取款的方法和一个返回余额的属性。

//  通常接口名称以字母I开头
public interface IBankAccount
{
    void PayIn (decimal amount);
    bool Withdraw (decimal amount);
    decimal Balance {get;}
}

现在可以编写银行账户的类了。 这些类不必彼此相关,他们可以是完全不同的类。 但它们都表示银行账户,因为它们都实现了IBankAccount 接口。


public class SaverAccount : IBankAccount
{
    private decimal _balance;

    public decimal Balance => _balance;

    public void PlayIn(decimal amount)
    {
        _balance += amount;
    }

    public bool Withdraw(decimal amount)
    {
        if (_balance >= amount)
        {
            _balance -= amount;
            return true;
        }
        Debug.Log("Withdrawal attempt failed.");
        return false;
    }

    public override string ToString()
    {
        return $"Venus Bank Saver: Balance = {_balance, 6:C}";
    }
}

实现这个类的作用一目了然。 其中包含一个私有字段 balance, 当存款或取款时就调整这个字段。 如果因为账户中的金额不足而取款失败, 就会显示一条错误信息。 还要注意, 因为我们要使代码尽可能简单,所以不实现额外的属性, 如账户持有人的姓名。 在现实生活中,这是最基本的信息, 但对于本例不必要那么复杂。

测试代码:

static void Main()
{
        // 把引用变量声明为 IBankAccount, 它可以指向实现这个接口的SaverAccount类的实例。
        IBankAccount venusAccount = new SaverAccount();
        venusAccount.PlayIn(200);
        venusAccount.Withdraw(100);
        Debug.Log(venusAccount.ToString());
}

注意:如果要调用由类实现的但不在接口中的方法, 就需要把引用强制转换为合适的类型。这段代码中,我们调用了ToString ,它不是 IBankAccount 实现的, 但也没有进行显示的强制转换, 这是因为 ToString 是一个 System.Object 的方法,因此编译器知道任何类都支持这个方法(从任何接口到System.Object的数据类型强制转换是隐式的)。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值