如果一个类没有任何虚方法,我看不到任何继承该类的方式都会影响任何未将实例明确引用为子类实例的代码,即

Subclass obj = new Subclass()

而不是
BaseClass obj = new SubClass()

因此,为什么sealed甚至存在?

如果您没有将任何内容声明为virtual(我认为在密封类中没有用),那么它可以防止的事情是(例如)ListViewItem,该代码存储一些有关“表示”该代码所表示的内容的额外信息。信息在那里,对于不考虑该子类编写的代码没有影响,这与重写方法不同。

最佳答案

(1)密封等级

我可能有一个接受BankAccount类型的对象的方法。我不希望您能够创建EvilBankAccount : BankAccount并将其传递到我的方法中。 EvilBankAccount可能会破坏我的系统,该系统对BankAccount进行了假设-例如,它可以序列化。也许我克隆了BankAccount以防止在提交后进行外部操作,并且EvilBankAccount克隆得很好,但是在其构造函数中启动了一个计时器,该计时器每30秒自动增加一次余额。

(2)密封件

您可以覆盖虚拟方法或属性,但可以对其进行密封,以使其在继承层次结构中无法被进一步覆盖。这里的一种用例是当您需要从构造函数访问成员时。

关于c# - 当 "sealed"是可选的时,在C#中 "virtual"的作用是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22394406/

10-11 11:31