我有CPU和人类播放器,所以我决定使用抽象类来定义共同特征。虽然它们的方法会有所不同,但两者的字段部分ToPlace将是相同的。我不明白为什么它必须是公开的,我认为这就像常规继承一样。我不希望这个列表是公开的,否则它不起作用。
abstract class Player
{
abstract public void Move(Piece p);
abstract public void Place(Piece p);
abstract public void TakeP(Piece p);
List<Piece> piecesToPlace = new List<Piece>();
}
是公共的,但它必须是内部的,假设继承的类位于同一命名空间中、受保护或内部保护。抽象类可以定义行为以及接口。因此,它可能仍然希望隐藏实现细节。
类成员的默认值是 private
,所以除非你为 piecesToPlace
指定任何其他访问修饰符,否则它只能在Player
类中访问。
你不必让它public
,使用protected
将使继承类可以访问它。
你在protected
关键字之后,这将:
访问仅限于从 包含类。
查看此处以获取更多信息:http://msdn.microsoft.com/en-us/library/ba0a1yw2(v=vs.110).aspx
逻辑很简单,这取决于你需要它。如果你定义它 公共 ,例如:
class Base
{
abstract public void Print();
}
class Derived: Base
{
public override void Print()
{}
}
Main()
{
Base base = new Derived();
//its possible
base.Print();
}
如果将其定义为受保护,则为"基础"。无法访问打印(智能感知甚至不会显示这种方法的存在)。由于这些方法只能从派生类访问。