问题标签 [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.
oop - 最终目的和密封
为什么会有人想将一个类标记为最终类或密封类?
visual-studio-2008 - 密封类和对象浏览器
在“对象浏览器”窗口中检查 .net 对象模型时,我发现缺少有关密封类的信息。
例如,如果导航到 mscorlib 容器->系统命名空间->字符串类,详细信息窗格将显示以下内容:
系统的公共类字符串
成员摘要:
将文本表示为一系列 Unicode 字符。属性:
[System.Runtime.InteropServices.ComVisibleAttribute(true), System.Reflection.DefaultMemberAttribute("Chars")]
似乎我只能通过代码定义窗口确定一个类是否被密封,或者当然,通过尝试从它派生。
然而,在关注Apress - Pro C# 2008 and the .Net 3.5 Platform
Andrew Troelsen 的文章时,作者在第 188 页展示了对象浏览器如何显示密封状态:
此信息是否已从 Visual Studio 2008 对象浏览器中删除?我能以某种方式找回它吗?
尽管作者在整篇文章中都提到了 Visual Studio 2008,但该屏幕截图必须来自以前的版本。这本书实际上是第 4 版,并于 2001 年开始使用 .Net 1.0 Beta 2。
c# - 应该 IEquatable, 可比在非密封类上实施?
任何人对是否或IEquatable<T>
应该IComparable<T>
通常要求T
是sealed
(如果是class
)有任何意见吗?
这个问题出现在我身上,因为我正在编写一组旨在帮助实现不可变类的基类。基类旨在提供的部分功能是相等比较的自动实现(使用类的字段以及可应用于字段以控制相等比较的属性)。完成后应该会很不错 - 我正在使用表达式树为 each 动态创建编译比较函数T
,因此比较函数应该非常接近常规相等比较函数的性能。(我正在使用一个不可变的字典键控System.Type
和双重检查锁定来以合理的方式存储生成的比较函数)
但是,出现的一件事是使用什么函数来检查成员字段的相等性。我最初的意图是检查每个成员字段的类型(我将称之为X
)是否实现IEquatable<X>
。但是,经过一番思考,我不认为这是安全的,除非X
is sealed
。原因是 if X
is not sealed
,我不能确定 ifX
是否适当地将相等检查委托给虚拟方法 on X
,从而允许子类型覆盖相等比较。
这就提出了一个更普遍的问题——如果一个类型不是密封的,它真的应该实现这些接口吗?我认为不会,因为我认为接口契约是在两种X
类型之间进行比较,而不是两种可能存在或不存在的类型X
(尽管它们当然必须X
是子类型或子类型)。
你们有什么感想?是否应该避免非密封类IEquatable<T>
?IComparable<T>
(也让我想知道是否有针对此的 fxcop 规则)
我目前的想法是让我生成的比较函数仅用于isIEquatable<T>
的成员字段,而不是使用 virtual if即使实现也是未密封的,因为该字段可能存储子类型,我怀疑大多数实现的设计是否适合继承.T
sealed
Object.Equals(Object obj)
T
T
IEquatable<T>
T
IEquatable<T>
c# - c#sealed 和 Java 的 final 关键字在功能上有什么区别吗?
在 Java 中,final 不仅仅适用于一个类。
所以,我想知道:这两个关键字之间有什么功能上的区别吗?
谢谢,对于一个相对菜鸟的问题感到抱歉。
快速的谷歌搜索并不能满足我的需求。
c# - 为密封类更改“ToString”
我有一个正在使用的课程:
它ToString
很弱(只是显示Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemType
)。
有没有办法覆盖它以显示名称WorkItemType
?
通常我只会将值聚合到一个新类中,但我将它用于 WPF 中的绑定(我希望在组合框中有一个 WorkItemTypes 列表并将所选值分配给绑定WorkItemType
变量。)
我想我在这里运气不好,但我想我会问。
c# - 我应该密封所有我知道不应该用作基类的类吗?
即使没有明显的性能或安全问题,我是否应该密封所有我知道不应该用作基类的类,或者这只是增加了麻烦?
wpf - 为什么 BitmapImage 是密封类?
当我注意到它被密封时,我正要从 BitmapImage 类继承,我快速浏览了一下,但找不到它被密封的原因。
有谁知道这是为什么?
谢谢
c++-cli - C++ 虚拟(密封)函数
我在我的 C++ 项目中使用来自 dll 的类。一切正常,直到...
尝试调用某个方法(在对象浏览器中列出)时,我收到一个错误,指出此方法不是命名空间的成员。
经过调查,我注意到这个方法被列为“virtual void x() seal”。
有没有办法调用这样的函数?
.net - 私有类是否在编译时被密封?
假设如下:我们有类 B,它是一个嵌套在类 A 中的私有类。没有任何类继承自类 B。问题是:编译器会自动将类 B 标记为 Sealed 吗?(在 VB 中不可继承)。编译器是否有充分的理由不将 B 类标记为密封?
我的思路是这样的:既然B类嵌套在A类内部并且是私有的,并且没有其他类继承自B类,那么封起来应该是安全的,因为它不能在A类之外继承(不是即使是 A) 的子类。
.net - 是否可以使用 AutoMapper 来包装方法?
我有两节课:
我想创建可以用于两个类的接口。最简单的解决方案是在 TestClass1 和 TestClass2 上实现接口,但我无法访问这些类的实现(外部 dll)。我想知道是否可以创建新接口并使用 AutoMapper 将 TestClass1 和 TestClass2 映射到 ITestInterface: