C# 密封类、密封方法、密封属性、密封事件、密封索引器

密封类

|-------------|--------------------------------------------------------------------------|
| 什么是密封类? | 用Sealed关键字修饰的类 |
| 使用目的 | 限制类的继承,向其他开发者指明: 1、该类的设计已经完整且稳定 2、不希望或不需要通过继承来扩展其功能 3、该类可能包含敏感逻辑,防止被恶意篡改 |
| 特点 | 1、不能被其他类继承,但是密封类可以继承其他类和接口。 2、密封类不能被abstract关键字修饰 3、密封类中的方法不能声明为虚方法或抽象方法 |
| 优点 | 保证了类的实现细节不会被子类修改,既增强了安全性,又带来了一定的性能提升。 |
| 适用场景 | 如果一个类没有被设计用来被继承,或者继承它没有意义,那就把它密封起来。例如核心业务逻辑、安全敏感类、辅助工具类、单例类等 |

cs 复制代码
public abstract class MyMath
{
    public abstract int Add(int a,int b);   
}

public sealed class RealMath : MyMath
{
    public override int Add(int a, int b)
    {
        return a + b;
    }
}

密封方法

|--------------|--------------------------------------------------------------------|
| 什么是密封方法? | 用Sealed关键字修饰的方法 |
| 使用目的 | 允许我重写父类的方法,但禁止我的子类再重写这个方法 |
| 特点 | 1、密封方法不能在继承过程中被派生类重写 2、声明密封方法必须将sealed和override一起使用,即只能对重写的方法进行密封。 |
| 适用场景 | 如果想要在某个层级停止方法的多态行为,防止子类继续修改该方法的实现 |

cs 复制代码
public abstract class MyMath
{
    public abstract int Add(int a,int b);   
}

public class RealMath : MyMath
{
    public sealed override int Add(int a, int b)
    {
        return a + b;
    }
}

密封属性

阻止更下层的子类再次重写这个属性

cs 复制代码
public abstract class MyMath
{

    public abstract int Count { get; }

    public virtual string Flag { get; }
   
}

public class RealMath : MyMath
{
    public sealed override int Count { get => 33; }

    public sealed override string Flag => "Hello World";
}

密封事件

cs 复制代码
public class Publisher
{
    public virtual event EventHandler OnEvent;
}

public class Subscriber : Publisher
{
    // 密封事件
    public sealed override event EventHandler OnEvent;
}

密封索引器

cs 复制代码
public class BaseList
{
    public virtual object this[int i] { get { /* 返回基础逻辑 */ } }
}

public class MyList : BaseList
{
    // 密封索引器
    public sealed override object this[int i] { get { /* 自定义逻辑 */ } }
}
相关推荐
加号31 天前
【C#】 字符串字节到十六进制字节数组的转换解析
c#
JaydenAI1 天前
[MAF的Agent管道详解-04]如何让LLM按照要求的结构输出数据?
ai·c#·agent·maf·agent pipeline
不会编程的懒洋洋1 天前
VisionPro 中 几何相交工具 Geometry-Intersection
图像处理·笔记·c#·视觉检测·机器视觉·visionpro
不会编程的懒洋洋1 天前
VisionPro 中 图像预处理工具
图像处理·笔记·c#·视觉检测·visionpro
雪豹阿伟2 天前
9.C# —— string拓展方法、StringBuilder高性能处理
c#·上位机
李星星_Alex2 天前
如何通过 C# 抓取抖音 RTMP 推流码实现自主推流
c#·抖音
qq7422349842 天前
全面深入的C#核心知识体系与编程实践精要——从语法基础到高级特性系统学习指南
java·算法·c#
fai厅的秃头姐!2 天前
2586. 统计范围内的元音字符串数
开发语言·c#
正运动技术2 天前
C#运动控制开源(二): CAD导图和小线段速度前瞻优化
c#·正运动技术·运动控制器·运动控制卡·正运动控制器·运动控制开源·ethercat运动控制器
楼田莉子2 天前
C#学习:分支与循环
服务器·后端·学习·c#