假设我创建了一个主类 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/