为什么要封一个班级?

2023-12-11

我想听听 .Net 框架中大量密封类背后的动机是什么。密封一个类有什么好处?我无法理解不允许继承如何有用,而且很可能不是唯一一个与这些类作斗争的人。

那么,为什么框架要这样设计,难道这不是一个突破性的改变来揭开一切吗?除了邪恶之外,一定还有其他原因吧?


类应该被设计为继承或禁止继承。设计继承是有成本的:

  • 它可以确定您的实现(您必须声明哪些方法将调用哪些其他方法,以防用户覆​​盖其中一个而不是另一个)
  • 它揭示了您的实施而不仅仅是效果
  • 这意味着你在设计的时候要考虑更多的可能性
  • 像 Equals 这样的东西很难在继承树中设计
  • 需要更多文档
  • 子类化的不可变类型可能会变得可变(ick)

《Effective Java》的第 17 条对此进行了更多详细介绍 - 不管它是在 Java 上下文中编写的,该建议也适用于 .NET。

就我个人而言,我希望类在 .NET 中默认被密封。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要封一个班级? 的相关文章

  • 在 .Net 托管的 IronPython 脚本中设置和获取变量

    我正在尝试使用 Net 控制台应用程序中托管的 IronPython 来构建验证规则引擎的原型 我已经将脚本精简到我认为的基础内容 var engine Python CreateEngine engine Execute from Sys
  • fetchsize和batchsize对Spark的影响

    我想通过以下方式控制 RDB 的读写速度Spark直接 但标题已经透露的相关参数似乎不起作用 我可以得出这样的结论吗fetchsize and batchsize我的测试方法不起作用 或者它们确实会影响阅读和写作方面 因为测量结果基于规模是
  • 在 C# 中使用通配符解析相对路径

    在 C 中 如果我有一个目录路径和一个带通配符的相对文件路径 例如 c foo bar and blah cpp 有没有一种简单的方法来获取绝对文件路径列表 例如 c foo blah a cpp c foo blah b cpp 背景 有
  • 当我使用 Image.FromFile() 时 FileNotFound

    我在这种情况下使用 Image FromFile string 方法 using System using System Collections Generic using System ComponentModel using Syste
  • c#.NET 和 sprintf 语法

    这段代码如何翻译成 C 具体来说是如何sprintf用C 实现 string output The user s logged in string loggedIn is string loggedOut isn t if TheUser
  • .NET“默认行终止符”?

    有什么方法可以弄清楚 NET 使用什么作为其 默认行终止符 例如 StringBuilder AppendLine String 的文档表示 附加指定字符串的副本 后跟默认行终止符 NET 中的几个与文本相关的类引用相同的概念 有什么方法可
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 如何根据给定的点生成热图

    我想生成 Windows 形式的热图 我有一组点作为输入 如何以最简单的方式做到这一点 谢谢 基于此处已有的答案 此方法允许您指定Colors您希望用作最大和最小颜色 private Color HeatMapColor double va
  • 自定义 IQueryable

    我正在尝试自定义应用程序的实体 使它们具有引用加载它们的 DataContext 的属性 我认为最好的方法是以某种方式创建一个实现 IQueryable 的类 并在其 GetEnumerator 方法中设置实体 datacontext 属性
  • 为什么 new String("Hello") 在 C# 中无效?

    制作背后的逻辑 原因是什么 String s new String Hello World 在 C 中非法 错误是 string String char 的最佳重载方法匹配有一些无效参数 我对 API 文档不感兴趣 我感兴趣的是为什么这是非
  • 由于索引无效,无法加载计数器名称数据 -Exception

    我使用 C 和 WPF 操作系统是 windows 7 Professional 和 Visual Studio 2012 SQL Server 2012 我在wpf中使用了Devexpress Grid 我想使用 ADO Net 服务器模
  • 在 JsonConverter 中递归调用 JsonSerializer

    我正在写一个JsonConverter要执行一些我需要在读 写时完成的转换任务 特别是 我采用现有的序列化行为 并在写入 读取时添加一些附加属性 在 的里面JsonConverter 我想利用通过的JsonSerializer实例来执行大部
  • 以编程方式设置 maxRequestLength

    有一个配置值叫做maxRequestLength 在配置文件中 它看起来像这样
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 如何计算最低系统要求?

    对于我用 Visual C 编写的应用程序 Testing 不 真的 这就是全部
  • 什么时候值得使用 BindingSource?

    我想我非常了解 BindingSource 类的作用 即在数据源和 UI 控件之间提供一个间接层 它实现了 IBindingList 接口 因此还提供了对排序的支持 而且我已经经常使用它 没有太多问题 但我想知道我使用它的频率是否超过了应有
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 为什么在 C 中执行算术运算后会丢失值的余数?

    我正在尝试通过遵循以下内容来学习基本的 C 编程textbook我一定遗漏了一些关于数据类型 舍入和 或运算顺序的信息 因为当我尝试构建一个简单的程序将秒转换为小时和分钟时 小时有效 但剩余分钟在它们出现时变为 0不应该是 谢谢Course
  • 如何将外部 HTML 文件导入 TypeScript 类

    我正在尝试构建一个正在使用的 JavaScript 包Webpack将 TypeScript 文件及其所有导入编译为单个 JavaScript 文件 该包的主要目标是按照一组给定的条件向任何使用该包的应用程序输出 HTML 目前 我通过使用
  • Django Admin 中有“DetailView”吗?

    我知道 Django 管理中有一个更改 更新视图 但是是否有任何详细视图仅列出记录的属性 有点像 Django 应用程序中的 DetailView 或者有人知道我可以安装任何第三方软件包来提供相同的功能吗 我最近也在调查这个问题 一种有效的
  • 查询 JSON 列中数组的元素

    最近升级到使用 PostgreSQL 9 3 1 来利用 JSON 功能 在我的表中 我有一个 json 类型列 其结构如下 id 123 name foo emails id 123 address somethinghere id 45
  • 对数组进行排序的最小“插入”次数

    假设有一个无序列表 我们唯一能做的操作就是移动一个元素并将其插入回任何位置 对整个列表进行排序需要多少步 我想答案是size of the list size of longest ordered sequence 但我不知道如何证明这一点
  • 在 Swift 中使用 GeoFire 查询不会提供有用的输出

    我现在非常绝望 因为我正在尝试在 Firebase 数据库上使用 GeoFire 来查找附近的用户 我现在已经被困了两天了 我在 Google 和 stackoverflow 上进行了很多搜索 并尝试了在那里找到的所有内容 但没有成功 现在
  • 黑莓 - 自定义尺寸 EditField

    我正在尝试组合一个应该如下所示的对话框 填写以下字段 喜欢 其中 行是编辑字段 我将所有字段粘贴到 Horizo ntalFieldManager 中 并将其添加到对话框中 不幸的是 第一个 EditField 占用了第一行的所有空间 我尝
  • 未找到名为 zlib 的模块

    我下载python2 6 6源码形式http www python org getit releases 2 6 6 之后我运行这些命令 配置 制作 我尝试导入 zlib 但它说没有名为 zlib 的模块 如何为其安装 zlib 模块 在我
  • tkinter 中是否可以有一个垂直方向的按钮?

    是否可以定向tk Button or ttk Button垂直 就像定向一个tk Scrollbar在某种方式self scrlbr tk Scrollbar master orient vertical 试过tk Button args
  • Python Tkinter:如何配置循环生成的按钮?

    我正在使用 Python 2 7 和 Tkinter 为我的代码制作 GUI 在某一时刻 框架中充满了许多循环按钮 当我单击其中一个按钮时 该函数需要知道它是从哪里调用的 所以我在谷歌上搜索并找到了这种很好的方法 def generate
  • 线程“AWT-EventQueue-0”中的异常 java.lang.NoClassDefFoundError

    我正在尝试阅读 docx文件到一个JTextPane 但它给出了一些例外 我在用POI图书馆 我应该怎么办 请帮帮我 这是我的代码 file new File C Users Siddique Ansari Documents CV Par
  • 尝试为 Windows 扩展安装 Python 时出现值错误

    我已经安装了 Microsoft Visual Studio 2008 我下载了 zip 文件用于 Windows 的 Python 扩展并将内容提取到我的 Python27 文件夹中 现在有一个名为 pywin32 214 的子文件夹 3
  • 更新 Django Rest Framework 中的多对多关系

    在我的 django 应用程序中 我之间存在多对多关系Orders and Packages 一个订单可以有多个包裹 我想了解更新和创建方法 模型 py class Package models Model prod name models
  • 当 iframe 托管代码无法访问的外部网站时获取 iframe 内容的高度[重复]

    这个问题在这里已经有答案了 可能的重复 让 iframe 适合其内容高度 正如问题标题中所描述的那样 我正在寻找一种方法来根据我的 iframe 托管的网站的高度来调整 iframe 的高度 因为我需要摆脱 iframe 的垂直滚动 同时
  • Facebook PHP SDK:上传活动封面照片

    我使用 facebook php sdk 为页面创建一个事件 现在正如所描述的here可以将图片上传到活动 问题是 这是个人资料图片 但一年多以来 Facebook 为活动提供了新的大幅封面照片 我想上传一张图片到那里 而不是作为个人资料图
  • Python GUI 中的实时绘图

    我正在尝试编写一个 Python GUI 并且需要进行实时绘图 我目前有一个程序可以从我正在使用的机器接收数据 我希望能够在收到机器输出的值时绘制它们 我一直在研究 从迄今为止的发现来看 在我看来 tkinter 或任何库都不能在 GUI
  • Angular ng-table 动态标头在内部不起作用

    我正在将 ng table 与动态列一起使用 使用创建者的示例 位于http bazalt cms com ng table example 20 它工作得很好 直到我尝试用 transclude 包裹指令 女巫导致标题消失 如上所示htt
  • 通过整数数组中的索引查询表

    在我从 VB NET 转换数据 to timestamp 和 to number 获得出色的结果后 我想知道 PostgreSQL 是否有可能通过来自 NET 的整数数组查询表索引 比如说 我的数组充满了 1 3 5 6 9 Postgre
  • SQLite 整数数据类型(如 int、integer、bigint 等)之间有什么区别?

    sqlite 中整数数据类型有什么区别 INT INTEGER TINYINT小智中薄荷 BIGINT无符号大整型 INT2 INT8 哪一个可以存储 32 位整数 哪一个可以存储 64 位值 支持128位吗 我现在发现整数数据大小有点令人
  • 为什么要封一个班级?

    我想听听 Net 框架中大量密封类背后的动机是什么 密封一个类有什么好处 我无法理解不允许继承如何有用 而且很可能不是唯一一个与这些类作斗争的人 那么 为什么框架要这样设计 难道这不是一个突破性的改变来揭开一切吗 除了邪恶之外 一定还有其他