-1

我有 CPU 和人类玩家,所以我决定使用抽象类来定义共同特征。虽然他们的方法会有所不同,但字段piecesToPlace 将是相同的。我不明白为什么它必须是公共的,我认为这就像常规继承。我不希望此列表公开,但否则不起作用。

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>();

    }
4

4 回答 4

2

它不必是公共的,但它必须是内部的,假设继承的类在同一个命名空间中、受保护的或内部受保护的。抽象类可以定义行为以及接口。因此,它仍然可能希望隐藏实现细节。

于 2013-10-30T15:21:39.533 回答
1

类成员的默认值是private,因此除非您为 指定任何其他访问修饰符piecesToPlace,否则它只能在Player类内部访问。

您不必 make 它public, usingprotected将使继承类可以访问它。

于 2013-10-30T15:24:46.333 回答
0

听起来您在protected关键字之后,这将:

访问仅限于包含类或从包含类派生的类型。

在这里查看更多信息: http: //msdn.microsoft.com/en-us/library/ba0a1yw2 (v=vs.110).aspx

于 2013-10-30T15:24:16.120 回答
0

逻辑很简单,这取决于你如何需要它。如果您将其定义为 public ,例如:

    class Base
    {
        abstract public void Print();
    }

    class Derived: Base
    {
         public override void Print()
         {}
    }

    Main()
    {
         Base base = new Derived();
         //its possible
         base.Print();
    }

如果您将其定义为受保护,则无法访问 base.Print(智能感知甚至不会显示此类方法存在)。因为这些方法只能从派生类访问。

于 2013-10-30T15:40:07.417 回答