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

现在有问题了。许多回合功能需要访问所有玩家和俱乐部列表。还。玩家类中有需要访问回合列表的功能。

如何解决这个问题?我知道我没有表现出太多。但我宁愿阅读一些一般规则。如何组织它?我是否应该将对 TorunamentManager 的引用传递给需要访问这些列表的 Player 和 Round 的那些方法?我应该完全不同地组织它吗?

我是 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

如果这是您要查找的内容,我将发布特定代码。

我有一个包含用户和组的应用程序。
在用户中,我想添加和删除组。
并且在组中想要添加和删除用户但想要添加和删除组。
想要一个同步另一个。

创建了一个类 UserGroup 和一个 UserGroup 的 HashSet 调用 UsersGroups。
将 UsersGroups 传递给用户和组。
然后从用户 LINQ where(x => x.User = this)
获取组并获取用户组使用 LINQ where(x => x.Group = this)

于 2012-12-04T22:54:58.650 回答