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
课堂上这样的方法.
这可能吗?
默认情况下,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)