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

c# - 类字段可以密封吗?

MSDN C# 编程指南中,提到:

“派生类上覆盖基类的虚拟成员的类成员、方法、字段、属性或事件可以将该成员声明为密封的。”

我理解上述关于方法、属性和事件的陈述,但上述陈述对类的字段如何有效?我在一个程序中尝试了这个并验证了一个字段不能是虚拟的,因此不能被覆盖。那么怎么才能封印呢?如果不能,MSDN 参考中的上述声明是否应该忽略字段?

谢谢。

0 投票
3 回答
314 浏览

java - android中的密封方法

我是新手,我正在讨论密封关键字和引用的密封对象。我用谷歌搜索,但找不到在 android 中使用密封方法的简单示例。我尝试了类似的方法

谁能告诉我如何使用这种密封方法。提前致谢。

0 投票
5 回答
906 浏览

c# - 关于覆盖规则 C# 的混淆

我对方法覆盖和 OOP 原则的有效性有点困惑。我知道关于密封、阴影、覆盖、虚拟等的一切,但我遇到了一个场景,这让我很困惑。假设我有:

根据我到目前为止研究的所有内容,可以在子类中使用override关键字覆盖声明为虚拟抽象(在抽象类中)的方法。据此,上面的代码完美无缺。当我删除virtual关键字,然后尝试使用override关键字覆盖该方法时,编译器会给出错误:

无法覆盖继承的成员“inheritence.classA.sayhello()”,因为它未标记为虚拟、抽象或覆盖

然后我从子类中删除了覆盖关键字,并将实现提供为:

在这种情况下,可以覆盖该方法。我能够覆盖该方法,它不是虚拟的或抽象的。所以,我的问题是:

1、不违反OOP原则吗?因为我能够覆盖该方法,该方法在父级中未标记为虚拟

2.为什么允许我以这种方式覆盖该方法?哪个甚至没有标记为virtual

3.从classA方法中删除virtual关键字,当我试图在 classB 中覆盖该方法时它给了我在 classA 中密封方法的感觉。(正如我之前提到的编译器错误)。如果我删除virtual,以便子类可能不会覆盖它,那么为什么子类可以巧妙地覆盖它,删除它的override关键字?仅仅是这种情况,sealed关键字是为设计的吗?

0 投票
2 回答
16778 浏览

c# - 为什么抽象类不能是密封的或静态的?

为什么抽象类不能是密封的或静态的?

我也对为什么在 C# 中将静态类声明为密封和抽象的问题感到困惑?.

0 投票
4 回答
795 浏览

c# - 密封必须与覆盖一起使用?

来自 msdn密封(C# 参考)

“当应用于方法或属性时,密封修饰符必须始终与覆盖一起使用。”

为什么必须始终与覆盖一起使用?

0 投票
3 回答
1363 浏览

c# - 当“虚拟”是可选的时,C# 中“密封”的目的是什么?

如果一个类没有任何虚拟方法,我看不出任何继承类的方式会影响任何没有将实例显式引用为子类实例的代码,即

而不是

那么,为什么会sealed存在呢?

如果您没有将任何内容声明为virtual(我认为在密封类中这样做没有意义),那么它所阻止的只是(例如)aListViewItem存储一些关于它代表什么的额外信息,用于“知道”该信息的代码是在那里,与重写方法不同,这对没有考虑到该子类编写的代码没有影响。

0 投票
2 回答
394 浏览

c# - 可以在 C# 中的密封类中声明密封类或静态类吗?

这是两个不同的问题:

  1. 标记为密封的类可以存在于密封类中吗?
  2. 标记为静态的类可以存在于密封类中吗?

这些问题只是为了更好地理解核心概念。谁能强调上述概念的实际用途?

0 投票
3 回答
386 浏览

c# - 我们是否能够为系统方法创建重载?

我将自己的LargeWholeNumber类用于整数值。在System.Math类中有许多Max适用类型的方法。我是否能够为此Max方法创建一个重载来比较LargeWholeNumber实例?

我尝试创建自己的Math继承自的类System.Math,但它说"Cannot inherit from sealed class 'Math'"

提前感谢您的建议。

0 投票
2 回答
482 浏览

scala - 在 Scala 中使用密封案例类创建两个相关的 AST

每当我不得不在 Scala 中创建 AST 时,我都会使用抽象的密封特征/案例类模式。到目前为止它工作得非常好,让编译器检查模式匹配是一个很大的胜利。

但是现在我遇到了一个我无法解决的问题。如果我有 2 种语言,其中一种是另一种的子集,该怎么办?作为一个简单的例子,考虑一个 lambda 演算,其中每个变量都是绑定的,以及另一种相关的语言,其中变量可以是绑定的或自由的。

第一语言:

第二语言:

唯一的变化是从变量中删除范围。

如您所见,有很多冗余。但是因为我使用的是密封类,所以很难想出一个好的方法来扩展它。组合它们的另一个挑战是,现在每个 Lambda 和应用程序都需要在类型级别跟踪其参数的语言。

这个例子并没有那么糟糕,因为它非常小,但是想象一下对于严格的 HTML/弱 HTML 也有同样的问题。

0 投票
3 回答
344 浏览

c# - .Net 本身是否有不能继承的类?

我很想知道 C# 中是否有任何示例。我想不出一个禁止继承的示例而不是一些商业意图,所以我想知道 c# 本身的一些真实世界示例。

我知道密封类,我只是在 C# 本身中寻找一些示例,而不是隐式密封的值类型和结构。