抽象类中受保护的抽象或公共抽象方法

Lyu*_*hev 5 c# oop protected abstract

嗨,我有一个抽象类,其中有一些公共方法和一些抽象方法.我有公众,所以他们实现派生类的常用方法.

令我困惑的是为什么我想要定义一个公共抽象方法而不是保护抽象.对于我来说,在抽象类中定义一个公共抽象方法是没有意义的....因为如果是抽象将在派生类中被覆盖,但同样如果被定义为public,但不知何故定义更有意义它受到保护,因为我们知道我们将在派生类中覆盖它.

将方法定义为抽象类中的公共抽象是错误的吗?哪个更好?为什么?

Ekk*_*Ekk 10

这取决于你想要达到的目标.例如,你有一个Television类,它有3种方法TurnOn,TurnOffDraw.

您只需要客户端TurnOnTurnOff电视,但只有其子类应该知道Draw屏幕上的内容和方式.所以,Television看起来或多或少会像下面一样.

public abstract class Television
{
    public abstract void TurnOn();

    public abstract void TurnOff();

    protected abstract void Draw();
}
Run Code Online (Sandbox Code Playgroud)

然后每个公司都有自己的实施.

public sealed class MyTelevision
    : Television
{
    public override void TurnOn()
    {
        Console.WriteLine("Turn on my tv");
    }

    public override void TurnOff()
    {
        Console.WriteLine("Turn off my tv");
    }

    protected override void Draw()
    {
        // code here.
    }
}
Run Code Online (Sandbox Code Playgroud)

客户可以TurnOnTurnOff电视,但Draw屏幕上不能有任何东西.


Sam*_*sov 8

出于同样的原因,你想要一个对象中的公共方法:)你只是不知道这个阶段的特定实现.它在具有非常高抽象级别的类中很常见,例如中间件.

编辑:这是100%合法.您只需要确保它是您希望在每个具体实现中向世界其他地方公开的功能.入口点方法(例如:start,execute,parse ..)通常属于这种类型.

UML抽象公共考试