问题标签 [sealed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
901 浏览

oop - 最终目的和密封

为什么会有人想将一个类标记为最终类或密封类?

0 投票
2 回答
245 浏览

visual-studio-2008 - 密封类和对象浏览器

在“对象浏览器”窗口中检查 .net 对象模型时,我发现缺少有关密封类的信息。

例如,如果导航到 mscorlib 容器->系统命名空间->字符串类,详细信息窗格将显示以下内容:

系统的公共类字符串
     成员

摘要:
将文本表示为一系列 Unicode 字符。

属性:
[System.Runtime.InteropServices.ComVisibleAttribute(true), System.Reflection.DefaultMemberAttribute("Chars")]

似乎我只能通过代码定义窗口确定一个类是否被密封,或者当然,通过尝试从它派生。

然而,在关注Apress - Pro C# 2008 and the .Net 3.5 PlatformAndrew Troelsen 的文章时,作者在第 188 页展示了对象浏览器如何显示密封状态:

替代文字

此信息是否已从 Visual Studio 2008 对象浏览器中删除?我能以某种方式找回它吗?

尽管作者在整篇文章中都提到了 Visual Studio 2008,但该屏幕截图必须来自以前的版本。这本书实际上是第 4 版,并于 2001 年开始使用 .Net 1.0 Beta 2。

0 投票
4 回答
5593 浏览

c# - 应该 IEquatable, 可比在非密封类上实施?

任何人对是否或IEquatable<T>应该IComparable<T>通常要求Tsealed(如果​​是class)有任何意见吗?

这个问题出现在我身上,因为我正在编写一组旨在帮助实现不可变类的基类。基类旨在提供的部分功能是相等比较的自动实现(使用类的字段以及可应用于字段以控制相等比较的属性)。完成后应该会很不错 - 我正在使用表达式树为 each 动态创建编译比较函数T,因此比较函数应该非常接近常规相等比较函数的性能。(我正在使用一个不可变的字典键控System.Type和双重检查锁定来以合理的方式存储生成的比较函数)

但是,出现的一件事是使用什么函数来检查成员字段的相等性。我最初的意图是检查每个成员字段的类型(我将称之为X)是否实现IEquatable<X>。但是,经过一番思考,我不认为这是安全的,除非Xis sealed。原因是 if Xis not sealed,我不能确定 ifX是否适当地将相等检查委托给虚拟方法 on X,从而允许子类型覆盖相等比较。

这就提出了一个更普遍的问题——如果一个类型不是密封的,它真的应该实现这些接口吗?我认为不会,因为我认为接口契约是在两种X类型之间进行比较,而不是两种可能存在或不存在的类型X(尽管它们当然必须X是子类型或子类型)。

你们有什么感想?是否应该避免非密封类IEquatable<T>IComparable<T>(也让我想知道是否有针对此的 fxcop 规则)

我目前的想法是让我生成的比较函数仅用于isIEquatable<T>的成员字段,而不是使用 virtual if即使实现也是未密封的,因为该字段可能存储子类型,我怀疑大多数实现的设计是否适合继承.TsealedObject.Equals(Object obj)TTIEquatable<T>TIEquatable<T>

0 投票
2 回答
14395 浏览

c# - c#sealed 和 Java 的 final 关键字在功能上有什么区别吗?

可能重复:
C# 中 Java 的 final 等价物是什么?

在 Java 中,final 不仅仅适用于一个类。

所以,我想知道:这两个关键字之间有什么功能上的区别吗?

谢谢,对于一个相对菜鸟的问题感到抱歉。

快速的谷歌搜索并不能满足我的需求。

0 投票
7 回答
1195 浏览

c# - 为密封类更改“ToString”

我有一个正在使用的课程:

ToString很弱(只是显示Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemType)。

有没有办法覆盖它以显示名称WorkItemType

通常我只会将值聚合到一个新类中,但我将它用于 WPF 中的绑定(我希望在组合框中有一个 WorkItemTypes 列表并将所选值分配给绑定WorkItemType变量。)

我想我在这里运气不好,但我想我会问。

0 投票
4 回答
3652 浏览

c# - 我应该密封所有我知道不应该用作基类的类吗?

即使没有明显的性能或安全问题,我是否应该密封所有我知道不应该用作基类的类,或者这只是增加了麻烦?

0 投票
3 回答
759 浏览

wpf - 为什么 BitmapImage 是密封类?

当我注意到它被密封时,我正要从 BitmapImage 类继承,我快速浏览了一下,但找不到它被密封的原因。

有谁知道这是为什么?

谢谢

0 投票
3 回答
1900 浏览

c++-cli - C++ 虚拟(密封)函数

我在我的 C++ 项目中使用来自 dll 的类。一切正常,直到...

尝试调用某个方法(在对象浏览器中列出)时,我收到一个错误,指出此方法不是命名空间的成员。

经过调查,我注意到这个方法被列为“virtual void x() seal”。

有没有办法调用这样的函数?

0 投票
2 回答
139 浏览

.net - 私有类是否在编译时被密封?

假设如下:我们有类 B,它是一个嵌套在类 A 中的私有类。没有任何类继承自类 B。问题是:编译器会自动将类 B 标记为 Sealed 吗?(在 VB 中不可继承)。编译器是否有充分的理由不将 B 类标记为密封?

我的思路是这样的:既然B类嵌套在A类内部并且是私有的,并且没有其他类继承自B类,那么封起来应该是安全的,因为它不能在A类之外继承(不是即使是 A) 的子类。

0 投票
2 回答
1970 浏览

.net - 是否可以使用 AutoMapper 来包装方法?

我有两节课:

我想创建可以用于两个类的接口。最简单的解决方案是在 TestClass1 和 TestClass2 上实现接口,但我无法访问这些类的实现(外部 dll)。我想知道是否可以创建新接口并使用 AutoMapper 将 TestClass1 和 TestClass2 映射到 ITestInterface: