## 1. 密封类的概念
密封类是一种不能被继承的类,使用`sealed`关键字声明。密封类的主要特点是它不能有派生类。
### 1.1 定义
```
public sealed class SealedClass
{
public void Display()
{
Console.WriteLine("This is a sealed class.");
}
}
```
在上述代码中,`SealedClass`被声明为密封类,因此无法被其他类继承。
### 1.2 特点
- **不可继承**:密封类不能被继承,任何尝试继承密封类的操作都会导致编译错误。
- **成员特性**:密封类可以包含字段、属性、方法等成员,但这些成员不能被派生类重写。
- **虚方法**:密封类可以包含虚方法,但由于不能被继承,这些虚方法无法在派生类中被重写。
## 2. 密封类的用途
### 2.1 防止误用
密封类可以防止开发者无意中继承某个类,从而避免因继承带来的不期望的行为。
### 2.2 性能优化
在某些情况下,密封类可以带来性能优化。例如,编译器可以对密封类的虚方法调用进行优化,因为它们知道这些方法不会被进一步重写。
### 2.3 保护数据完整性和安全性
密封类可以确保类的行为和数据结构不会被外部修改,从而提高代码的安全性和可靠性。
## 3. 密封类的声明
密封类的声明非常简单,只需在类定义前加上`sealed`关键字。
```
public sealed class SealedAnimal
{
public string Name { get; set; }
public void Speak()
{
Console.WriteLine($"{Name} is speaking.");
}
}
```
## 4. 密封类与密封方法
### 4.1 密封方法
密封方法是重写基类中的虚方法,并阻止进一步重写的方法。它必须与`override`关键字一起使用。
```
public class BaseClass
{
public virtual void Display()
{
Console.WriteLine("Base class method.");
}
}
public class DerivedClass : BaseClass
{
public sealed override void Display()
{
Console.WriteLine("Derived class method.");
}
}
```
在上述代码中,`DerivedClass`中的`Display`方法被标记为`sealed`,因此不能再被派生类重写。
### 4.2 使用场景
- **限制重写**:防止派生类进一步修改方法的行为。
- **明确设计意图**:表明该方法的行为是最终确定的。