C# 接口 IBankAccount 实现转账与余额管理的完整示例
本文通过一个完整的 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);
}
}
}
关键实现细节:
- 数据类型:使用
decimal而非浮点数,以确保货币计算的精度。 - 安全性:
PayOut方法检查余额是否充足,不足时返回false并提示失败,避免透支。 - 格式化:利用
{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);
*/
}
}
执行流程分析
- 初始化:创建两个
BankMethod实例,分别赋给Huguo和guo接口变量。 - 存款操作:
PayIn方法直接修改内部balance变量,Huguo 余额变为 10,000,guo 余额变为 200,000。 - 状态输出:调用
ToString()方法,利用string.Format输出格式化后的字符串到控制台。
总结
本例清晰地展示了 C# 接口在项目开发中的规范作用。通过将逻辑解耦为接口定义与类实现,代码具备更好的可扩展性(例如未来添加短信通知或日志记录无需修改核心业务结构)。以上就是基于C#接口的实例详解,更多关于C#接口编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













