2

授業がある

class TournamentManager
{
    public List<Target> Targets = new List<Target>();
    public List<Player> Players = new List<Player>();
    public List<Club> Clubs = new List<Club>();
    public List<Round> Rounds = new List<Round>();
}

今、問題があります。多くのラウンド関数は、すべてのプレーヤーとクラブのリストにアクセスする必要があります。また。プレイヤー クラスには、ラウンド リストへのアクセスが必要な関数があります。

これを解決するには?私はあまり見せていないことを知っています。しかし、私はむしろいくつかの一般的な規則を読みたいと思います。それを整理する方法は?これらのリストにアクセスする必要がある Player と Round のメソッドに TorunamentManager への参照を渡す必要がありますか? まったく別の方法で整理する必要がありますか?

私はOOPとその種のプログラミングが初めてです。また、そのような問題を解決する方法を教えてくれる良い本も見つかりません。

4

4 に答える 4

3

おそらく別の方法で整理する必要があります。関係を考慮してください。

どのような関係が存在しますか? これは私が見るものです

  • トーナメントには一連のラウンドがあります
  • すべてのラウンドにはチームのセットがあります
  • すべてのチームには一連の選手がいます

(ターゲットがどこに収まるかはわかりません)

私にとって、これは次のことを意味します

public class Tournament
{
 public List<Round> Rounds { get; set; }
 public List<Team> Teams { get; set; }
}

public class Team
{
 public List<Player> Players { get; set; }
}

public class Round
{
 public Team Home { get; set; }
 public Team Away { get; set; }
}

public class Player
{
 public string Name { get; set; }
}
于 2012-12-04T22:41:04.530 に答える
2

TournamentManager クラスが非静的で (おそらく複数のインスタンスを持つことができるため)、Round クラスと Player クラスに TournamentManager クラスのプロパティを参照する必要があるメソッドがある場合、TournamentManager インスタンスへの参照をRound および Player クラスのコンストラクター (その後、その参照をプライベート フィールドに保存できます)。

また、TournamentManager クラスの複数のインスタンスが必要ない場合は、静的クラスにすることができます。次に、Round および Player クラスのメソッドがリストを直接参照できます。

public class Player
{
    ...

    public void SomeMethod()
    {
        int numRounds = TournamentManager.Rounds.Count;

        ...
    }

    ...
}
于 2012-12-04T22:58:20.703 に答える
1

コードを整理する方法はたくさんありますが、何をしようとしているのか、コードがどれほど複雑であるかを知らずに、実装を推奨することは困難です。Round および Player クラス関数が TournamentManager クラスのパブリック リストにアクセスできるようにする場合は、リストを静的要素として宣言する必要があります。その後、TournamentManager.listName を介して他のクラスのリストを参照できます。

于 2012-12-04T22:37:35.463 に答える
1

これがあなたが探しているものである場合、特定のコードを投稿します。

ユーザーとグループを含むアプリケーションがあります。
ユーザーでは、グループを追加および削除したいと考えています。
また、グループでユーザーを追加および削除したいが、グループを追加および削除したい。
一方を他方に同期させたい。

Class UserGroup と UserGroup の HashSet を作成し、UsersGroups を呼び出します。
UsersGroups を User と Group の両方に渡します。
次に、ユーザー LINQ where(x => x.User = this)
からグループを取得し、ユーザー グループを取得するには、LINQ where(x => x.Group = this) を使用します。

于 2012-12-04T22:54:58.650 に答える