C# 抽象类实战教程:从定义到派生的完整代码示例
什么是 C# 抽象类?
抽象类 作为其他类的蓝图。它永远不能直接实例化,标记为 abstract 关键字。抽象类通常包含一个或多个 abstract 或 virtual 方法,期望子类实现或重写。它们提供通用契约,同时允许具体子类提供特定行为。
考虑以下示例。我们先定义通用 Animal 类,不知动物是狗、猫还是其他。Description 方法是占位符,将由派生类特化。

当具体动物类型已知时,创建继承自 Animal 的子类如 Dog。Dog 类不能改变基类 Description 方法;而是提供自己的实现或添加如 DogDescription 的新方法。这演示了 C# 抽象类的核心概念:基类契约,具体子类填充细节。

在 C# 中创建抽象类
下面分步指导定义抽象类及使用它的具体子类。虽不在在线编辑器执行,但代码演示抽象类设计最佳实践。
步骤 1:定义抽象类
创建名为 Tutorial 的抽象类,包含单个 virtual 方法。virtual 关键字表示该方法不能被派生类重写。

代码解析
- 用
abstract关键字声明类,防止直接实例化。 - 类内将
Set方法定义为public virtual void Set(),使子类原样继承。
步骤 2:创建派生类
同一文件定义具体类 Guru99Tutorial 继承自 Tutorial。子类引入自身属性和方法,同时遵守抽象基类建立的契约。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication {
abstract class Tutorial {
public virtual void Set() {
// 基础实现(当前为空)
}
}
class Guru99Tutorial : Tutorial {
protected int TutorialID;
protected string TutorialName;
public void SetTutorial(int pID, string pName) {
TutorialID = pID;
TutorialName = pName;
}
public string GetTutorial() {
return TutorialName;
}
static void Main(string[] args) {
Guru99Tutorial pTutor = new Guru99Tutorial();
pTutor.SetTutorial(1, ".Net");
Console.WriteLine(pTutor.GetTutorial());
Console.ReadKey();
}
}
}
关键点:Guru99Tutorial 不能重新声明 Tutorial 中定义的 Set 方法;必须按原样使用继承版本。
总结
C# 抽象类为构建可扩展系统提供坚实基础。通过在不可实例化的基类中声明通用行为,开发者强制执行契约,同时允许派生类提供具体实现。此模式促进代码复用、清晰度和大型代码库中的强类型。
C语言
- 掌握 C# 抽象类与抽象方法:实战指南
- C++ 运算符全解析:类型、示例与示例程序
- C++ 结构体详解:定义、初始化、指针、函数参数与局限性
- C++ 类与对象实战指南:封装、构造函数、析构函数与访问控制
- 掌握 C++ std::list:语法、函数与实战示例
- C++ Struct 与 Class 核心差异、语法及最佳实践
- C# 枚举——定义、示例与用法详解
- C# 抽象类实战教程:从定义到派生的完整代码示例
- C++数据抽象实战:接口与实现分离的设计艺术
- C++接口编程:抽象类与纯虚函数实现规范契约
- Java 接口 vs 抽象类:如何选择合适的抽象方式
- Java 抽象类与抽象方法:规范契约、强制实现与模板模式