—— 面向对象设计的基石
🔍抽象类核心定义
abstract class AbClass { ... } // abstract修饰符声明
- 不可实例化:new AbClass() 将触发编译错误
- 继承专用:仅能作为其他类的基类存在
- 混合成员组合:可同时包含抽象方法和已实现方法
⚙️ 二、抽象类四大核心特性
抽象方法强制规范
abstract public void PrintStuff(string s); // 无方法体
- 派生类必须重写:使用 override 关键字实现具体逻辑
- 未实现即报错:若派生类未实现所有抽象方法,编译失败
灵活成员组合
成员类型 | 示例 | 是否必须实现 |
---|---|---|
抽象方法 | abstract void Method(); | ✅ 派生类实现 |
普通方法 | public void Identify(){…} | ❌ 直接继承 |
抽象属性 | abstract int MyInt {get;set;} | ✅ 派生类实现 |
数据成员 | public int SideLength = 10; | ❌ 直接继承 |
多级抽象继承
abstract class BaseA { ... }
abstract class BaseB : BaseA { ... } // 抽象类继承抽象类
class Concrete : BaseB { ... } // 最终实现类
- 传递性抽象要求:未实现的抽象方法逐层传递直至具体类
字段与方法限制
- 字段不可抽象:数据成员(字段/常量)必须包含具体值
- 方法灵活实现:非抽象方法可直接提供默认逻辑
💻 三、实战代码示例解析
场景1:基础抽象类实现
abstract class AbClass
{
public void IdentifyBase() => Console.WriteLine("I am AbClass");
abstract public void IdentifyDerived(); // 抽象方法声明
}
class DerivedClass : AbClass
{
override public void IdentifyDerived() // 强制实现
=> Console.WriteLine("I am DerivedClass");
}
// 调用
DerivedClass obj = new DerivedClass();
obj.IdentifyBase(); // 输出: I am AbClass
obj.IdentifyDerived(); // 输出: I am DerivedClass
场景2:含属性与方法的复杂抽象类
abstract class MyBase
{
public int SideLength = 10; // 具体字段
abstract public int MyInt { get; set; } // 抽象属性
public int Perimeter() => 3 * SideLength; // 具体方法
}
class MyClass : MyBase
{
private int _myInt;
public override int MyInt // 属性实现
{
get => _myInt;
set => _myInt = value;
}
}
// 调用
MyClass mc = new MyClass();
mc.MyInt = 28;
Console.WriteLine($"周长: {mc.Perimeter()}"); // 输出: 周长: 30
💡 四、关键设计原则
开闭原则实践
抽象类定义扩展点(抽象成员),关闭基础实现(具体成员)
模板方法模式基础
abstract class AlgorithmTemplate
{
public void Execute() {
Step1();
Step2(); // 抽象步骤
}
protected abstract void Step2();
}
通过抽象方法控制算法骨架,派生类定制关键步骤
接口 vs 抽象类
特性 | 抽象类 | 接口 |
---|---|---|
成员实现 | 可包含具体实现 | 纯抽象 |
多继承 | ❌ 单继承 | ✅ 多实现 |
构造函数 | ✅ 支持 | ❌ 不支持 |
版本兼容性 | 新增具体方法不影响派生类 | 新增方法破坏实现类 |
🚀 五、应用场景建议
- 框架设计:为模块提供基础结构(如ASP.NET Core的ControllerBase)
- 跨组件规范:强制不同模块实现统一行为(如支付网关抽象基类)
- 算法模板:固定流程中允许步骤自定义(如游戏AI决策树)
最佳实践提醒:
当需要为派生类提供共享代码实现时首选抽象类,仅需行为契约时选择接口!
📚 技术总结:
抽象类是C#实现继承多态的核心机制,通过强制派生类实现关键成员,在保持系统扩展性的同时维护架构稳定性。掌握其“部分实现+部分抽象”的特性,能显著提升框架设计的健壮性与灵活性。
抽象类构成面向对象设计的骨架支撑!