c# - 抽象类中 protected 抽象或公共(public)抽象方法

标签 c# oop abstract protected

您好,我有一个抽象类,其中有一些公共(public)方法和一些抽象方法。 我有公众,以便他们为派生类实现通用方法。

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

在抽象类中将方法定义为public abstract是错误的吗?哪个更好,为什么?

最佳答案

这取决于你想达到什么目的。例如,您有一个 Television具有 3 个方法的类,TurnOn , TurnOff , 和 Draw .

您只希望客户 TurnOnTurnOff电视但只有它的子类应该知道什么以及如何Draw屏幕上。所以,Television看起来或多或少像下面这样。

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

    public abstract void TurnOff();

    protected abstract void Draw();
}

然后每个公司都有自己的实现。

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

客户可以TurnOnTurnOff电视但不能Draw屏幕上的任何内容。

关于c# - 抽象类中 protected 抽象或公共(public)抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30369047/

相关文章:

c# - 你调用的对象是空的。在 MVC 布局中 = null

Java 泛型、扩展泛型和抽象类

java - 自定义对象中的方法应该具有破坏性吗?

Java:为什么结果是5而不是10?

python - 将函数分配为python中有限状态机的变量

java - 从抽象类 toString 方法扩展的类不起作用 :/

c++如何在抽象父类中调用子方法?

c# - 使用 MySql.Data.MySqlClient::MySqlCommand 字符串格式的 MySQL C# 查询问题

c# - 使用 Entity Framework 忽略重复键插入

c# - Connection.open 无限期挂起,不抛出异常