问题标签 [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 投票
4 回答
36162 浏览

c# - 防止方法在 C# 中被覆盖

如何防止方法在派生类中被覆盖?

在 Java 中,我可以通过在final我希望防止被覆盖的方法上使用修饰符来做到这一点。

如何在 C# 中实现相同的目标?
我知道使用sealed但显然我只能将它与override关键字一起使用?

所以在上面的例子中,我可以防止methodB()被任何派生自 class 的类覆盖B,但是我如何首先防止 classB覆盖methodB()

更新:当我发布这个问题时,我错过了A 类声明virtual中的关键字。methodB()更正了它。

0 投票
3 回答
29742 浏览

c# - C#sealed vs Java final

有人可以告诉我以下使用sealed无法编译的原因吗?然而,如果我替换sealedfinalJava 并将其编译为 Java,它就可以工作。

0 投票
2 回答
1727 浏览

.net - 为什么必须为 WinMD/WinRT 组件密封公开类型?

VS 编译器不允许为 WINMD 类型库创建密封的公开类型。

为什么要设置这个限制?(我知道密封类型的优势,我的问题是关于 Win RT 组件)。

0 投票
3 回答
3838 浏览

c# - 密封类中没有主体的虚拟方法

当我尝试运行以下代码时,它会出错。

我得到的错误是。

HB_Auth.AuthImpl.ReqHandler.ReqHandler(object, IntPtr)' 必须有一个主体,因为它没有标记为抽象、外部或部分 (CS0501) (HB_Auth.Patched)

新虚拟成员HB_Auth.AuthImpl.ReqHandler.BeginInvoke(object[], AsyncCallback, object)' is declared in a sealed classHB_Auth.AuthImpl.ReqHandler' (CS0549) (HB_Auth.Patched)

0 投票
1 回答
2647 浏览

c# - 反射未从中提取值:具有属性的密封类,该属性是另一个密封类的对象。

我正在使用 object.GetType().GetProperty(string propertyName) 通过反射反复评估属性。

如果 obj 是密封类但具有作为普通公共类对象的属性,这可以正常工作。但是,如果此属性包含一个密封的类对象,它不会通过 GetProperty() 方法返回任何属性。

尝试通过 Prpty1 --> Prpty2--> Prpty3 从基类对象递归迭代。param.Properties 包含 Prpty1、Prpty2、Prpty3 的字符串数组。我无法获得 Prpty2,它以 Null 的形式出现。使用下面编写的方法进行此访问。

示例代码如下:

请有人帮我找到访问 Prpty2、Prpty3 的方法,或者它是使用反射的一些现有限制。谢谢。

0 投票
3 回答
2023 浏览

.net - 为什么“密封”会影响 IDisposable 的实现?

在这里阅读答案后,我决定将我的类标记为密封,以简化IDisposable实现。为什么sealed会影响IDisposable的实现(例如GC.SuppressFinalize(this);不需要调用)?请解释发生了什么。我需要能够向其他开发人员解释为什么我将课程密封起来。

0 投票
6 回答
100407 浏览

scala - 什么是密封特性?

密封类在“Scala 编程”中进行了描述,但密封特性没有。我在哪里可以找到有关密封特性的更多信息?

我想知道,如果密封特征与密封类相同?或者,如果不是,有什么区别?什么时候使用密封特性是个好主意(什么时候不)?

0 投票
1 回答
2543 浏览

java - 如何创建示例 java.lang.SecurityException:密封违规:包 .. 已密封

我们遇到了一个长期运行的 Java 进程突然吐出 java.lang.SecurityException: seal violation: package .. 在 JVM 运行时覆盖密封 jar 后被密封的问题。

我有点理解这个异常,但是为了重现这个(以及接下来的内容),我试图人为地创建一个密封的异常并且它不起作用。

有一个名为 'seal.jar' 的 jar 文件,其中有一个 META-INF/MANIFEST.MF 文件,如下所示:

该包包含 A1、A2、A3 类,如下所示:

第二个 jar seal-2.0.jar 具有相同的三个类,但打印“版本 2.0” 现在第三个 jar 文件 (run.jar) 具有以下内容:

我认为当我执行以下操作时,这段代码会创建一个密封的异常:

所以看起来 A1 是从 seal-1.0.jar 加载的,但 A2 是从覆盖的 seal-1.0.jar 加载的。

因为第一类(A1)是从 seal-1.0.jar 加载的,第二类(A2)是从被覆盖的文件加载的,所以不应该违反密封吗?

0 投票
3 回答
7333 浏览

.net - 为什么要密封单例类?

我想知道为什么单例类应该被密封。如果我们将构造函数设置为私有,我们可以阻止派生类吗?.. 下面我从 MSDN 粘贴几行。请给我一些颜色。

在这个策略中,实例是在第一次引用类的任何成员时创建的。公共语言运行时负责变量初始化。该类被标记为密封以防止派生,这可能会添加实例。有关将类标记为密封的利弊的讨论,请参见 [Sells03]。此外,该变量被标记为只读,这意味着它只能在静态初始化期间(此处显示)或在类构造函数中分配。

http://msdn.microsoft.com/en-us/library/ff650316.aspx

0 投票
3 回答
1885 浏览

c# - 如何向密封类 Arc 添加属性

如何向密封的 Arc 类添加两个新属性。我想用一个 double 属性来扩展这个类来保存一个 double 值和一个字符串属性来保存对象的名称。我的第一次尝试是通过 Tag 属性,但这只能保存双精度值或对象名称。

问题是我创建了一个包含 43 个圆弧对象的新用户控件,当鼠标进入圆弧时,另一个控件会显示输入段的值和名称。所以每个弧都使用相同的 MouseEntered 函数,我想通过“对象发送者”获取信息。

我希望任何人都有一个好主意。