为什么接口无法标记为密封?

wes*_*ton 18 c# interface sealed

public sealed interface IMyInterface
{
}
Run Code Online (Sandbox Code Playgroud)

给出"修改后的'密封'对此项无效"

我可以在某些方面理解接口必须是可降级的,否则类不能实现它.

但是为什么我不能指定一个接口不应该定义一个子接口,或者有没有办法,只是没有sealed

编辑

我应该努力解释为什么我会想要这个.我经常看到接口继承链,其中dev应该使用组合.Sealed在课堂上是理想的,我想知道是否有办法对接口强制执行相同的操作.由于不合理的继承性使得我认为更难以重构和维护.

编辑2

在评论和帖子的反映中,接口继承树不能像对象继承树那样复杂.当你从另一个界面派生时,IX你所说的只是"必须实现IX".防止这种情况没有任何好处.

Eri*_*ert 21

密封课程或课堂的虚拟方法的目的是降低成本.设计继承是昂贵的,如果你不正确,它是危险的.不正确地设计继承会产生安全性,正确性和健壮性,因此如果您不打算设计继承,那么密封您的类是明智的,从而避免与继承设计相关的成本.

需要为继承设计类,因为它们具有实现细节.接口没有实现细节.可继承的接口没有任何相关成本.因此,没有动力增加允许密封接口的功能.

  • @ShuggyCoUk:如果接口被定义为“内部”,是否有任何类型安全的方法将实例传递给外部代码并让它们将它们传回?考虑以下场景:从“UsBankAccount”派生的“UsCheckingAccount”类和从“FrenchBankAccount”派生的“FrenchCheckingAccount”类位于一个程序集中。我想定义一个“ICheckingAccount”,它可以是它们中的任何一个,但是接受“ICheckingAccount”的代码知道它实际上是其中之一,而不是其他任意类。(是的,我知道,类继承并不是真正的安全)。 (2认同)

Bot*_*000 13

这会让人感到困惑.使用标准语法,这意味着您无法实现该接口.此外,接口不包含任何功能或字段,因此密封它没有实际用途.接口或多或少是契约.

从"接口继承"中断接口不会做任何事情,因为人们可以只实现你的接口,而另一个接口可以继承你的接口.


Bro*_*ass 5

sealed在接口的上下文中意味着没有类可以实现这个接口。那将是无用的,因此是不允许的。