实现后密封接口

chr*_*t.s 7 c# virtual overriding interface sealed

我正在做一个小项目,我遇到了这个问题.

项目输出是包含接口的库.我希望实现该接口并尽可能密封其中的函数:

public interface ITest
{
    void SomeMethod();
}

class A : ITest
{
    public sealed override SomeMethod()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是让每个人都可以使用该界面,并拥有一些实现它的专门类.例外情况是,我想确保如果某人创建了类型A的专用类,他/她将无法更改方法的行为.

问题是您不能在其中放置"override"关键字,因为该方法未在界面中声明为"虚拟".而且你不能在接口中将其声明为"虚拟",因为它是不允许的.并且您无法删除"override"关键字,因为"密封"需要它.

任何变通方法或头脑风暴的想法都会受到欢迎,但如果有人能想出一个包含界面的解决方案,我会非常乐意学习它!

谢谢!

编辑:忘了这个问题!就像Ani说的那样,我忘了默认C#中的方法是密封的.似乎偶尔回到基础知识总是好的...

Ani*_*Ani 22

我可能完全误解了这个问题,但是如果你打算密封这个方法A,你可以这样做:

class A : ITest
{
    public void SomeMethod()  { ... }
}
Run Code Online (Sandbox Code Playgroud)

与Java不同,C#中的方法默认是密封.子类A将无法覆盖该方法,因为它尚未被标记virtual.

另一方面,如果您打算在界面中标记"几乎密封"的方法,那么它迫使实施类立即将其密封,这是不可能的.它不是(也不应该是)接口的业务来指示实现的这些细节 - 接口意味着表示规范.