C# 接口 IBankAccount 实现转账与余额管理的完整示例

巷口听风
巷口听风
发布时间:2026-10-14| 3人浏览过
原创

本文通过一个完整的 C# 控制台项目示例,讲解如何使用 interface 定义银行账户规范。内容包括定义 IBankAccount 接口、实现类 BankMethod 的具体逻辑(存款、取款、余额查看),以及如何通过接口类型进行多态调用。

接口定义与继承关系

在 C# 中,接口(Interface)用于定义一组行为契约。本例首先定义了基础的银行账户接口 IBankAccount,随后扩展了支持转账功能的 IBankTransfer 接口,后者继承了前者所有成员。

namespace ConsoleApplication1
{
    public interface IBankAccount
    {
        void PayIn(decimal amount);
        bool PayOut(decimal amount);
        decimal Balance
        {
            get;
        }
    }
    
    // IBankTransfer 继承自 IBankAccount,额外增加转账能力
    public interface IBankTransfer:IBankAccount
    {
        bool Transfer(IBankAccount Action,decimal amount);
    }
}
  • PayIn(decimal amount):定义存款动作,不指定具体金额来源。
  • PayOut(decimal amount):定义取款动作,返回布尔值表示交易是否成功。
  • Balance:只读属性,仅暴露当前余额的获取器(getter)。
  • IBankTransfer:作为扩展接口,预留了 Transfer 方法用于账户间转账。

接口实现类 BankMethod

类 BankMethod 实现了 IBankAccount 接口。它使用私有字段 balance 存储实际金额,并提供了具体的业务逻辑处理。

namespace ConsoleApplication1
{
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    public class BankMethod : IBankAccount
    {
        private decimal balance;
        
        // 存入资金
        public void PayIn(decimal Account)
        {
            balance += Account;
            // 可选:Console.WriteLine("您现在的存款是:{0}",balance);
        }
        
        // 提取资金
        public bool PayOut(decimal Account)
        {
            if (Balance > Account)
            {
                balance -= Account;
                Console.WriteLine("您已经取走了{0},还剩下余额是:{1}", Account, balance);
                return true;
            }
            Console.WriteLine("提款失败!");
            return false;
        }
        
        // 获取当前余额
        public decimal Balance
        {
            get { return balance; } 
        }
        
        // 重写 ToString 以方便输出格式
        public override string ToString()
        {
            return string.Format("您现在的存款是:{0:C}", balance);
        }
    }
}

关键实现细节:

  1. 数据类型:使用 decimal 而非浮点数,以确保货币计算的精度。
  2. 安全性:PayOut 方法检查余额是否充足,不足时返回 false 并提示失败,避免透支。
  3. 格式化:利用 {0:C} 占位符自动处理货币符号和千位分隔符。

主程序入口与多态测试

在 Main 方法中,我们演示了如何通过接口类型引用不同的对象实例,体现 C# 的多态特性。虽然两个变量类型都是 IBankAccount,但它们指向独立的内存实例。

    class Test
    {
        static void Main()
        {
            // 声明为接口类型,实例化为具体类
            IBankAccount Huguo = new BankMethod();
            IBankAccount guo = new BankMethod();
            
            // 模拟操作:各自存入不同金额
            Huguo.PayIn(10000);
            guo.PayIn(200000);
            
            // 输出结果,验证状态隔离
            Console.WriteLine(Huguo.ToString());
            Console.WriteLine(guo.ToString());
            
            /* 
            // 以下代码展示了直接调用具体类的写法,但推荐上方接口写法
            // BankMethod Bank = new BankMethod();
            // Bank.PayIn(200000);
            // Bank.PayOut(30000);
            */
        }
    }

执行流程分析

  1. 初始化:创建两个 BankMethod 实例,分别赋给 Huguo 和 guo 接口变量。
  2. 存款操作:PayIn 方法直接修改内部 balance 变量,Huguo 余额变为 10,000,guo 余额变为 200,000。
  3. 状态输出:调用 ToString() 方法,利用 string.Format 输出格式化后的字符串到控制台。

总结

本例清晰地展示了 C# 接口在项目开发中的规范作用。通过将逻辑解耦为接口定义与类实现,代码具备更好的可扩展性(例如未来添加短信通知或日志记录无需修改核心业务结构)。以上就是基于C#接口的实例详解,更多关于C#接口编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。