gpt4 book ai didi

C#继承

转载 作者:太空狗 更新时间:2023-10-29 22:25:06 26 4
gpt4 key购买 nike

假设我有以下代码:

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
}
}

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

这可能吗?

最佳答案

默认情况下,C# 中的方法是密封的。但是,您无法采取任何措施来防止方法隐藏(在派生类中公开具有相同名称的方法,通常使用 new)。

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

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");
}
}

关于C#继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1031072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com