Visual Studio 中的密封类和静态类

目录

一、密封类

1.定义

2.核心特点

3.代码示例

4.注意事项

二、静态类

1.定义

2.核心特点

3.代码示例

4.注意事项

三、对比分析

四、优缺点总结

1.密封类

2.静态类

五、适用场景


一、密封类

1.定义

使用 关键字sealed 修饰的类,禁止被其他类继承,用于限制类的继承层次,保护核心逻辑不被篡改。

2.核心特点

不可继承:密封类不能作为基类,且子类无法使用:密封类 来语法继承。

可实例化:允许创建对象(除非是密封类的同时还是静态类)。

可密封方法 :在非密封类中,可使用 关键字sealed 修饰重写的方法,防止子类进一步重写该方法。

3.代码示例

// 定义密封类

sealed class MathUtility

{

public int Add(int a, int b) => a + b;

}

//错误示例:无法继承密封类

class AdvancedMath : MathUtility { } // 编译报错

4.注意事项

密封类可以继承其他非密封类,但自身不能被继承。

密封类的方法默认不可重写,除非方法本身是 virtual 或 override(需配合sealed显式密封)。

二、静态类

1.定义

使用 关键字static 修饰的类,无法实例化所有成员(字段、方法、属性)都必须是静态的,常用于工具类或全局功能封装。

2.核心特点

不可实例化:不能使用 new 创建对象,直接通过类名来访问对象(类名.成员名)。

成员均为静态:字段、方法、属性等必须使用 关键字static 修饰。

不可继承:静态类默认是密封的,无法被继承(无需额外添加 sealed 关键字)。

3.代码示例

// 定义静态类

static class StringHelper

{

public static bool IsNullOrEmpty(string str) => string.IsNullOrEmpty(str);

// 静态字段

private static int _callCount = 0;

// 静态方法

public static void IncrementCount() => _callCount++;

}

// 使用静态类

bool result = StringHelper.IsNullOrEmpty("test");

StringHelper.IncrementCount();

4.注意事项

静态类不能包含实例构造函数,但可以有静态构造函数(无参数,用于初始化静态成员)。

静态类的成员属于类本身,而非对象,内存中仅存在一份副本。

三、对比分析

|----------|----------------------|---------------------------|
| 对比维度 | 密封类 | 静态类 |
| 实例化 | 允许 | 禁止 |
| 继承性 | 本身不可被继承,但可以继承其他类 | 不可继承,也不可被继承 |
| 成员类型 | 可包含实例成员和静态成员 | 只能包含静态成员 |
| 使用场景 | 限制继承(如工具类、框架核心类) | 封装无状态的工具方法(如Math、Console) |
| 灵活性 | 较高(可实例化、可以继承其他类) | 较低(固定为静态成员) |

四、优缺点总结

1.密封类

优点:

防止滥用继承,保护核心逻辑。

允许实例化,支持面向对象的封装和多态。

缺点:

限制了类的扩展性。

2.静态类

优点:

无需实例化,调用方便(直接类名访问)。

占用内存低(静态成员仅初始化一次)。

缺点:

不可测试:静态方法依赖全局状态,难以模拟和单元测试。

灵活性差:无法实现接口、继承或多态。

五、适用场景

密封类:

框架中的核心类(如String、int等基础类型)。

工具类或辅助类,需防止被继承篡改逻辑。

静态类:

无状态的工具方法(如字符串处理、数学计算)。

建议:

优先使用非密封类,仅在明确需要限制继承时使用密封类。

静态类仅用于纯工具方法,避免包含可变状态(如静态字段)。

相关推荐
sulikey5 小时前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
XGeFei6 小时前
【Fastapi学习笔记(3)】——资源的层级关系、安全性-幂等性、Field、工厂函数
笔记·学习·fastapi
星恒随风7 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
暴躁小师兄数据学院8 小时前
【AI大数据工程师特训笔记】第14讲:Linux操作系统与shell脚本
大数据·人工智能·笔记
土狗TuGou9 小时前
SQL内功笔记 · 第8篇:事务的四大特性与隔离级别
数据库·笔记·后端·sql·mysql·oracle
knighthood20019 小时前
vscode插件开发的一些过程
ide·vscode·编辑器
智者知已应修善业9 小时前
【51单片机用T0定时器方式1,实现0.5S的时间间隔实现第一次一个灯亮、第二次二个灯亮,直到全部灯亮,然后重复整个过程】2023-12-29
c++·经验分享·笔记·算法·51单片机
智者知已应修善业10 小时前
【51单片机4位静态数码管显示1234】2023-11-14
c++·经验分享·笔记·算法·51单片机
whyTeaFo10 小时前
MIT6.1810: xv6 book Chapter4: Traps and system calls 笔记
笔记