我有课
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的新手和那种编程。我也找不到任何可以向我展示如何解决这类问题的好书。
答案 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)