1. 继承与重写:C#面向对象编程的核心机制
在银行账户管理系统的开发过程中,我深刻体会到继承与重写是构建可扩展业务逻辑的利器。想象一下,当我们需要为不同类型的银行账户(储蓄账户、信用账户、礼品卡账户)实现差异化业务规则时,继承机制让我们能够复用基础账户类的通用功能,而方法重写则赋予子类定制特定行为的能力。
1.1 继承的本质与实现
继承的核心价值在于建立"is-a"关系。在我们的银行系统案例中,InterestEarningAccount(利息账户)本质上就是一个BankAccount(银行账户),只是增加了计算利息的特殊行为。C#中使用冒号语法实现继承:
csharp复制public class InterestEarningAccount : BankAccount
{
// 子类特有成员
}
实际开发中需要注意几个关键点:
- 构造函数链式调用:子类必须通过
base关键字调用父类构造函数 - 访问控制:父类的
private成员对子类不可见,应使用protected修饰需要继承的成员 - 初始化顺序:父类字段初始化 → 父类构造函数 → 子类字段初始化 → 子类构造函数
经验之谈:在金融系统中,账户基类通常会将核心字段如_balance标记为private,通过protected方法提供受控访问,这是封装敏感数据的行业惯例。
1.2 方法重写的实战技巧
当不同类型的账户需要实现不同的月末处理逻辑时,虚方法重写就派上用场了。我们在基类中定义虚方法:
csharp复制public virtual void PerformMonthEndTransactions() { }
在子类中通过override关键字提供具体实现:
csharp复制// 利息账户实现
public override void PerformMonthEndTransactions()
{
if (Balance > 500m)
{
decimal interest = Balance * 0.02m;
MakeDeposit(interest, DateTime.Now, "apply monthly interest");
}
}
