内部类需要访问外部类。好吗?

时间:2012-12-04 22:33:37

标签: c# .net oop class object

我有课

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

现在有问题。 许多Round功能需要访问所有玩家和俱乐部列表。 也。 Player类中的函数需要访问Rounds列表。

如何解决这个问题?我知道我没有多少表现。但我宁愿阅读一些一般规则。怎么整理呢?我是否应该将对TorunamentManager的引用传递给需要访问这些列表的Player和Round的那些方法?我应该把它组织起来吗?

我是OOP的新手和那种编程。我也找不到任何可以向我展示如何解决这类问题的好书。

4 个答案:

答案 0 :(得分:3)

你应该以不同的方式组织它。考虑关系

有什么关系?这就是我要看的内容

  • 锦标赛有一系列轮次
  • 每一轮都有一组球队
  • 每支球队都有一组球员

(不确定Target适合的位置)

对我而言,这意味着

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

答案 1 :(得分:2)

如果你的TournamentManager类是非静态的(也许你可以有多个实例)并且你的Round和Player类有需要引用TournamentManager类属性的方法,你可以将引用传递给TournamentManager实例到Round和Player类的构造函数(然后可以在私有字段中保存该引用)。

此外,如果您不需要TournamentManager类的多个实例,则可以将其设为静态类。然后,Round和Player类方法可以直接引用列表。

public class Player
{
    ...

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

        ...
    }

    ...
}

答案 2 :(得分:1)

您可以通过多种方式组织代码,而不知道您要执行的操作以及代码的复杂程度,因此很难推荐实现。如果您希望Round和Player类函数能够访问TournamentManager类中的公共列表,则需要将列表声明为静态元素。然后,您可以通过TournamentManager.listName

引用其他类中的列表

答案 3 :(得分:1)

如果您正在寻找,我会发布特定代码。

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

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