考虑体育俱乐部的情况。 俱乐部可以有一名俱乐部经理和一名或多名教练(每队1名教练) 所以,这是Manager和Coach类的一个例子。
Class ClubManager
{
public void RegisterMember()
{
// code for registering a member..
}
}
Class Coach
{
public void DeviceTeamFormation()
{
// code for making a team formation..
}
}
我的问题是,我怎么能有一位也是教练的俱乐部经理?因为有这种情况的体育俱乐部。
感谢所有帮助。 谢谢你们。
答案 0 :(得分:8)
不,你不能用课来做这件事。然而,接口可以帮助您实现这一目标。
另一方面,您可能希望添加另一个间接级别,并将管理员和教练角色与人员分开,这样您就可以将每个角色分配给一个人(也可能是同一个人)。
答案 1 :(得分:3)
Lucero的第二段是正确的方法。教练和经理不是人,他们是人们扮演的角色。从理论上讲,同一个人可能是TeamPlayer,TeamCaptain,Coach,Manager和WaterBoy!
所以你想要的是构图,而不是继承。例如:
SportsClub myClub = new SportsClub();
Person Bill = new Person();
myClub.Manager = new Manager(Bill);
myClub.Coach = new Coach(Bill);
答案 2 :(得分:2)
作为教练并成为俱乐部经理并不是这个人的固有属性。他们是这个人所扮演的角色。因此,我会说人物对象(或者你想要称之为的任何对象)应该被赋予角色。然后,那些角色/能力对象将委托这些方法。
所以看起来像这样:
Person joe = new Person("joe");
joe.setClubManager(true);
joe.getManagerAbilities().RegisterMember();
如果没有关于你的问题的更多信息,很难知道什么是正确的,但也许这会让你想到一些不同的路线。
答案 3 :(得分:1)
您正在寻找多重继承。不幸的是,C#目前不支持此功能。我没有看到它出现在2010版本中。
您可以实现多个接口,但无法从多个类继承。
答案 4 :(得分:1)
正如Chinmay Kanchi所说,C#不支持多重继承;但是,您可以从类型继承并实现任意数量的接口。
public interface ICoach {
}
public class ClubManager : SomeType, ICoach {
}
答案 5 :(得分:1)
我会使用委托而不是继承,而是使用复合模式。 (http://en.wikipedia.org/wiki/Composite_pattern)
答案 6 :(得分:1)
您可以执行此操作但使用以下过程,因为C#不支持通过类继承
Interface IClubManager
{
public void RegisterMember();
}
Interface ICoach
{
// code for making a team formation..
}
class SomeDesignation : ICoach, IClubManager
{
}
答案 7 :(得分:1)
正如其他人已经注意到的那样,你不能用类做,尽管你可以用接口来做,这样做的缺点是你每次都重新实现接口。另一种方法是使用mixins:Is it possible to implement mixins in C#?。
答案 8 :(得分:1)
你不能完全拥有你想要的东西 - C#不支持多重继承。
除了关于使用接口的其他建议(以及它们的局限性)之外,您可以重新考虑对象模型。
如果您将数据结构(类)分开,那么Coach类和ClubManager类具有属性Person,您将不会“复制”该人的数据。并且您可以使用工厂方法从人与人和/或ClubManager之外创建Coach。
另一种选择是具有“InRole”功能,该功能表示一个人可以拥有的角色,而Person类将具有您需要的两种方法,但如果该人不在,则每个方法都可能抛出异常。正确的角色来执行操作。
或者,您可以注入“角色”,并使用某种形式的间接访问特定角色的功能。
答案 9 :(得分:0)
这是第一个出现在我脑海中的想法:
答案 10 :(得分:0)
我认为在这种情况下你会得到的最好的妥协(当然这是一个有争议的话题)是在ClubManagerCoach
类的行上创建一些暴露ClubManager
和{ {1}}属性。