c# - 私有(private)抽象方法的一些问题

标签 c# .net abstract-class

假设我创建了一个主类 Car - 我希望这个类是抽象的。抽象因为这是我的主要类(class),所以没有人应该为这个类(class)创建一个对象。这个类应该只作为“主干”存在。

我希望类只能从 Car 的子类创建(比方说 Mercedes、Ferrari...)。因为每辆车都应该有像StartEngine这样的方法,所以我把它放到了主要的类中。假设我有这个:

abstract class Car
{
  public string Name { get; set; }

  public abstract void StartEngine();
  private abstract bool CheckGasoline();
  //and so on...
}

class Mercedes : Car
{
  private override bool CheckGasoline()
  {
  //somehow check gasoline and return whatever...
  }

  public override void StartEngine()
  {
    if (CheckGasoline())
      //start engine...
  }
}

好吧,这行不通。由于私有(private)摘要:

virtual or abstract members cannot be private

所以我会让每个私有(private)方法都受到保护:

abstract class Car
{
  public string Name { get; set; }

  public abstract void StartEngine();
  protected abstract bool CheckGasoline();
  //and so on...
}

class Mercedes : Car
{
  protected override bool CheckGasoline()
  {
  //somehow check gasoline and return whatever...
  }

  public override void StartEngine()
  {
    if (CheckGasoline())
      //start engine...
  }
}

这样可以吗?我的意思是它正在工作,但它应该如何工作?当我只需要同一个类中的方法时使用 protected(就像这里:CheckGasoline() 只需要 StartEngine() )。不知何故私有(private)会更好看。

有什么建议吗?谢谢。

最佳答案

是的,没关系。子类型看不到私有(private)方法,因此不能覆盖它们:它们必须 protected (或公共(public)等).在 C# 中没有“对方法 X 私有(private)”这样的东西,所以它必须按原样就足够了。

关于c# - 私有(private)抽象方法的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925948/

相关文章:

c# - 关键字 'params' 究竟是如何工作的?

c# - 忽略字典键中的大小写

c++ - 我应该初始化抽象类的成员吗?

c# - 具有硬件通信的高级编程

c# - 图表问题

c# - 该进程无法访问文件,因为该文件正在被另一个进程使用

c# - 如何动态不呈现脚本标签?

c# - 使用 XML 的 WCF 请求验证

java - 如何在 Java 的实现类中的抽象类中实现抽象类?

c++ - 创建派生类对象的指针数组。 C++。抽象基类