C#核心(17)密封类

发布于:2024-12-18 ⋅ 阅读:(45) ⋅ 点赞:(0)

前言

我们先前已经学完了继承中的大部分知识,今天我们就来学习最后一个知识点,密封类。

其实我不喜欢叫他密封类,我比较喜欢叫他结扎。

在Unity中,C#的密封类(sealed class)是一个重要的概念,它源自于C#语言本身的设计。在C#中,密封类用于防止其他类从该类继承。这种设计有几个历史背景和实际应用。

密封类的历史背景

  1. 面向对象编程的原则
  • C#是一种面向对象的语言,它支持继承和多态。密封类的概念出现是为了提供一种方式来控制继承,以便开发者能够明确表示某个类不允许被进一步扩展。
  1. 设计上的考虑
  • 在软件设计中,某些类可能不希望被修改以保持其设计的完整性或安全性。例如,Unity中的一些基础库和系统类可能被设计为密封,以避免意外的修改导致不稳定或未定义的行为。
  1. 性能优化
  • 使用密封类可以让编译器和运行时进行优化,因为它知道该类不会被继承。这可以提高性能,尤其是在涉及虚方法调用的时候。对于Unity这类需要高性能渲染和快速计算的环境,这尤为重要。

Unity中的应用

在Unity中,密封类常用于一些基础组件和API中,例如:

  • Unity的基础类如 Vector3 和 Quaternion 等,它们被设计为工具类,用于提供基本的数学运算,并且不希望被继承以保证行为的一致性。
  • 类库的版本控制:当一个类封闭时,版本更新时可以保证原有功能不被外部修改,这对大型项目尤为关键,能够避免升级时引入的不兼容问题

当然你自己的函数也可以密封。

基本概念

使用sealed作为关键字的类,让类无法继承。

你想,既然不能有儿子,那可不就是结扎嘛。

实例

其实这个东西理解起来很简单,我们直接上实例。

using System;

// 密封类
sealed class Game
{
    // 私有字段
    private string name;
    private int score;

    // 构造函数
    public Game(string name)
    {
        this.name = name;
        score = 0;
    }

    // 公有方法
    public void Play()
    {
        Console.WriteLine("Playing {0}...", name);
        score += 10;
    }

    public void ShowScore()
    {
        Console.WriteLine("Current score for {0}: {1}", name, score);
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建游戏实例
        Game game = new Game("Super Mario");

        // 进行游戏
        game.Play();
        game.Play();
        game.Play();

        // 显示分数
        game.ShowScore();

        // 由于Game类是密封类,无法被继承
        // 下面的代码将无法编译通过
        // class NewGame : Game { }
    }
}
 

博主也不给你留练习题了,你知道有这个概念就行,在以后设计中,如果你不希望别人继承你的类,或者你不希望这个类被继承,可以尝试这样设计。

通常我们都是让最底层的子类不能被继承,保证规范性和安全性

总结

到这里我们继承相关的所有知识,我们就来简单回顾一下吧。

继承的基本规则我们讲了基本的语法和一些使用方法,然后就介绍了七大原则,也是让你初步体会了设计相关的准则,以及为什么会这样,之后我们又讲了继承中的构造函数,你也知道构造函数的执行顺序,就是万物之父和装箱拆箱的概念,以及今天的密封类。

如果你有什么忘记的,建议重新回去翻翻,这些东西都是基础中的基础,希望你能牢牢掌握。

还是那句话,学习路上,脚踏实地。

请期待我的下一篇博客!

我来自佑梦游戏开发,感谢你的关注和收藏!


网站公告

今日签到

点亮在社区的每一天
去签到