私は 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>();
}