C# 四种特殊类:抽象类、密封类、静态类、部分类

C# 中共有四种特殊类 ,各自拥有严格的特性、使用限制和场景,是基础笔试、面试高频考点。分别为:抽象类 abstract密封类 sealed静态类 static部分类 partial

一、抽象类 abstract class

1. 核心代码

复制代码
// 抽象类:专门用于被继承的模板类
abstract class Test
{

}

2. 核心特性(必背)

  • 不能被实例化(不能 new)

  • 专门用于被子类继承,充当父类模板

  • 可以包含普通成员、虚方法、抽象方法

  • 只要类中有抽象方法,该类必须是抽象类

3. 一句话总结

抽象类是"模板",只能被继承,不能直接创建对象。


二、密封类 sealed class

1. 核心代码

复制代码
// 密封类:可以实例化、不能被继承
sealed class Test1
{

}

2. 核心特性(必背)

  • 可以被实例化(可以 new)

  • 不能被任何类继承(最终类、终止继承链)

  • 无派生类,杜绝重写和扩展

  • 使用sealed 修饰

3. 一句话总结

密封类是"最终类",可以造对象,禁止别人继承。

二、抽象类 abstract class

1. 核心特点

  • 使用 abstract 修饰

  • 不能实例化(不能 new)

  • 唯一作用:专门用来被继承

2. 内部可包含成员

  • 普通属性、普通方法(有方法体)

  • 抽象属性、抽象方法(无方法体)

3. 继承规则

  • 普通子类继承抽象类:必须重写所有抽象成员

  • 抽象子类继承抽象类:可以不实现,继续传递给子类


三、静态类 static class

1. 核心代码

复制代码
// 静态类:全部成员静态、不能实例化、不能被继承
static class Test2
{
    // 静态类只能包含静态成员
    public static int Age { get; set; }
}

2. 核心特性(必考重点)

  • 不能被实例化(禁止 new)

  • 不能被继承、也不能继承其他类

  • 所有成员必须是静态的(字段、属性、方法)

  • 程序启动时自动加载,全局唯一

  • 通过 类名.成员 直接调用 例:Test2.Age = 18;

  • 使用 static 修饰

3. 一句话总结

静态类是工具类,全员静态,不能造对象、不能被继承。


四、部分类 partial class

1. 核心代码

复制代码
// 部分类:可拆分多文件,编译自动合并
partial class Test3
{

}

2. 核心原理

部分类允许将同一个类 的代码拆分到多个不同的代码文件 中,程序编译时,编译器会自动将所有 partial 分部代码 合并为一个完整的类

3. 使用规则(必记)

  • 必须使用 partial 关键字修饰

  • 所有分部类 类名、命名空间必须完全一致

  • 每一个拆分文件都必须带 partial

  • 编译后对外仍是一个类,无感知拆分

4. 适用场景

团队协作、自动生成代码与手写代码分离、超大类拆分维护。

5. 一句话总结

部分类是"拆分合并类",写时分文件,跑时是一个类。


五、四大特殊类终极对比表(满分背诵版)

类类型 关键字 能否实例化(new) 能否被继承 核心特点
抽象类 abstract ❌ 不能 ✅ 可以 模板类,用于被继承
密封类 sealed ✅ 可以 ❌ 不能 最终类,禁止继承
静态类 static ❌ 不能 ❌ 不能 全员静态,工具类
部分类 partial ✅ 可以 ✅ 可以 分文件编写,编译合并

六、高频易错考题总结

  • 抽象类 不能 new,但可以包含普通方法

  • 密封类是杜绝派生,不影响实例化

  • 静态类双重禁止:不能实例化、不能被继承

  • 静态类中不允许出现实例成员

  • partial 只是语法拆分,运行时是一个完整类

七、简答题满分模板

1. 抽象类的特点?

抽象类使用abstract修饰,不能实例化,主要用于被继承;可以包含普通成员和抽象成员,普通子类必须重写所有抽象成员,用于定义统一规范。

2. 密封类的特点?

密封类使用sealed修饰,可以实例化,但不能被继承,用于防止类被拓展和重写,保护核心逻辑。

3. 静态类的特点?

静态类使用static修饰,不能实例化、不能被继承,内部所有成员必须为静态成员,通过类名直接调用,常用于工具类开发。

4. 部分类的作用?

部分类通过partial关键字实现,可以将一个类拆分到多个文件中编写,编译时自动合并为一个完整类,方便团队协作和代码分类管理。

相关推荐
leisoo80977 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
不会代码的小猴7 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
一只旭宝8 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
coder!mq10 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding10 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ11 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio
心平气和量大福大11 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言
码哥DFS11 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式
quantdash_cc12 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
ydd10010012 小时前
寻找两个正序数组的中位数 Java 题解,二分分割详解
java·开发语言