我正在自学C#,并且对从父对象的特定实例继承有疑问。
例如,如果我这样定义我的班级:
class League
{
public string name { get; set; }
}
class Player : League
{
public Guid PlayerGuid { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Team : Player
{
public Guid TeamGuid { get; set; }
public string TeamName { get; set; }
}
然后像这样实例化类:
static void Main(string[] args)
{
League myLeague = new League() { name = "The League" };
Player taco = new Player() { PlayerGuid = Guid.NewGuid(), FirstName = "Taco", LastName = "MacArthur" };
Player pete = new Player() { PlayerGuid = Guid.NewGuid(), FirstName = "Pete", LastName = "Eckhart" };
Team tacoTeam = new Team() { TeamGuid = Guid.NewGuid(), TeamName = "Password is Taco" };
Team peteTeam = new Team() { TeamGuid = Guid.NewGuid(), TeamName = "3-Pete" };
}
我如何确保Team tacoTeam从Player taco继承而Team peteTeam从Player pete继承?
我的感觉是我不了解如何针对这种情况正确定义类,并且希望能获得有关如何完成此操作的指导。
为了阐明元素之间的关系,我将“玩家”更改为“所有者”更好地表示了我的想法。我可以进一步为“玩家”添加一个类,以代表真实玩家而不是扶手椅玩家。
使用@neoistheone和@McGarnagle的输入,我可以对此进行修改并定义类:
class League
{
public string name { get; set; }
}
class Owner
{
public Guid OwnerGuid { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Team
{
public Guid TeamGuid { get; set; }
public string TeamName { get; set; }
public Owner TeamOwner { get; set; }
public League League { get; set; }
}
然后,我可以创建这些类的实例,并从中获取它们的内容:
static void Main(string[] args)
{
League MyLeague = new League() { name = "The League" };
Owner taco = new Owner() { FirstName = "Taco", LastName = "MacArthur", OwnerGuid = Guid.NewGuid() };
Owner pete = new Owner() { FirstName = "Pete", LastName = "Eckhart", OwnerGuid = Guid.NewGuid() };
Team tacoTeam = new Team() { TeamGuid = Guid.NewGuid(), TeamName = "Password is Taco", League = MyLeague, TeamOwner = taco };
Team peteTeam = new Team() { TeamGuid = Guid.NewGuid(), TeamName = "3-Pete", League = MyLeague, TeamOwner = pete };
List<Team> Teams = new List<Team>();
Teams.Add(tacoTeam);
Teams.Add(peteTeam);
foreach(Team team in Teams){
Console.WriteLine("Team Name:\t{0}\nTeam Owner:\t{1}\nLeague Name:\t{2}\n-----",
team.TeamName, team.TeamOwner.FirstName + " " + team.TeamOwner.LastName, team.League.name);
}
Console.ReadLine();
}
这似乎在帮助对代码中的数据进行建模以使其更容易将数据输入和输出与该应用程序一起工作的数据库中做得相当不错。
最佳答案
类继承意味着“是”关系。例如,您不希望玩家继承联赛,因为这意味着玩家是联赛。
相反,您想要的是组成-联赛由球队组成,而球队则由球员组成。您可以通过创建班级成员来表达作文。类Team
应该具有一个成员,该成员是类Player
的集合,依此类推。例如:
class Player
{
public Guid PlayerGuid { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Team
{
public Guid TeamGuid { get; set; }
public string TeamName { get; set; }
public IList<Player> Players { get; private set; }
public Team()
{
Players = new List<Player>();
}
}
class League
{
public string name { get; set; }
public IList<Team> Teams { get; private set; }
public League()
{
Teams = new List<Team>();
}
}
现在,要确保Taco属于Team Taco,请将其添加到
Team
类的相应实例中:static void Main(string[] args)
{
Player taco = new Player { PlayerGuid = Guid.NewGuid(), FirstName = "Taco", LastName = "MacArthur" };
Player pete = new Player { PlayerGuid = Guid.NewGuid(), FirstName = "Pete", LastName = "Eckhart" };
Team tacoTeam = new Team { TeamGuid = Guid.NewGuid(), TeamName = "Password is Taco" };
Team peteTeam = new Team { TeamGuid = Guid.NewGuid(), TeamName = "3-Pete" };
tacoTeam.Players.Add(taco);
peteTeam.Players.Add(pete);
League myLeague = new League { name = "The League" };
myLeague.Teams.Add(tacoTeam);
myLeague.Teams.Add(peteTeam);
}
关于c# - 让子对象从特定的父对象继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19254944/