C#继承

And*_*rei 5 c# inheritance abstract-class interface

假设我有以下代码:

interface ISomeInterface
{
    void DoSomething();
    void A();
    void B();    
}

public abstract class ASomeAbstractImpl : ISomeInterface
{
    public abstract void A();
    public abstract void B();
    public void DoSomething()
    {
        // code here
    }
}

public class SomeImpl : ASomeAbstractImpl 
{
    public override void A()
    {
        // code
    }

    public override void B()
    {
        // code
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我希望ASomeAbstractImpl.DoSomething()密封(最终)方法,所以没有其他类可以实现它.因为代码现在SomeImpl可以调用一个方法DoSomething()并且可以调用它(它不会覆盖抽象类中具有相同名称的方法,因为它没有标记为虚拟),但我想切断实现的可能性在SomeImpl课堂上这样的方法.

这可能吗?

Mar*_*ell 9

默认情况下,C#中的方法是密封的.但是,没有什么可以阻止方法隐藏(通常在派生类中公开具有相同名称的方法new).

或者,就此而言,接口重新实现:

static void Main()
{
    ISomeInterface si = new EvilClass();
    si.DoSomething(); // mwahahah
}

public class EvilClass : ASomeAbstractImpl, ISomeInterface
{
    public override void A() {}
    public override void B() { }
    void ISomeInterface.DoSomething()
    {
        Console.WriteLine("mwahahah");            
    }
}
Run Code Online (Sandbox Code Playgroud)