-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

publicを使用すると、protected継承クラスからアクセスできるようになります。

于 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 に答える