掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
理解 C# sealed 类与方法
本指南通过实战代码示例解释如何用 sealed 关键字限制 C# 继承与方法重写。
密封类
在 C# 中,sealed 关键字禁止类被继承。密封类永远不能有派生类型。
示例:
using System;
namespace SealedClass {
sealed class Animal { }
// 尝试继承密封类导致编译错误
class Dog : Animal { }
class Program {
static void Main (string [] args) {
Dog d1 = new Dog();
Console.ReadLine();
}
}
}
编译器报错:
error CS0509: 'Dog': cannot derive from sealed type 'Animal'
密封方法
重写虚方法时,若想阻止进一步重写,在 override 前加 sealed。
示例:
using System;
namespace SealedClass {
class Animal {
public virtual void MakeSound() {
Console.WriteLine("Animal Sound");
}
}
class Dog : Animal {
// 密封重写
sealed public override void MakeSound() {
Console.WriteLine("Dog Sound");
}
}
class Puppy : Dog {
// 尝试重写密封方法导致编译错误
public override void MakeSound() {
Console.WriteLine("Puppy Sound");
}
}
class Program {
static void Main (string [] args) {
Puppy d1 = new Puppy();
Console.ReadLine();
}
}
}
报错:
error CS0239: 'Puppy.MakeSound()': cannot override inherited member 'Dog.MakeSound()' because it is sealed
提示: 密封重写方法可阻止多级继承链中的进一步重写。
为何使用密封类?
- 安全性与完整性 – 密封类不可扩展,行为可预测,防止子类篡改。
- 性能 – 运行时知晓无子类,可对密封类型更激进优化。
- 静态工具类型 – 许多库通过密封类暴露静态成员(如 System.Drawing 中的
Pens)。
例如 Pens 类提供预配置的标准颜色 Pen 实例:
Pen bluePen = Pens.Blue; // 代表蓝色画笔
因 Pens 为密封,其静态成员无法被其他类型重写或修改。
C语言
- ASTM A729 A 级:双重正火回火钢——中碳结构钢标准
- ASTM A649 2 级 正火回火钢:中碳结构钢规格与性能
- ASTM A288 Class 4 淬火回火中碳钢:规格与性能详解
- ASTM A288 Class 5 淬火回火中碳钢:性能与标准全览
- C# 类与对象:面向对象编程的基石
- 掌握 C# 抽象类与抽象方法:实战指南
- 理解 C# 分部类与分部方法
- C++类与对象:面向对象编程实战指南
- C++ 友元函数与友元类:突破访问控制的利器
- C# 继承完全指南:基类、派生类、初始化与多重继承替代方案
- C# 多态完全指南:静态多态与动态多态(重载、重写、虚方法)
- 精通 Java:理解对象、类与核心 OOP 概念