C# 使子对象从特定父对象继承

C# 使子对象从特定父对象继承,c#,inheritance,C#,Inheritance,我正在自学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; } } clas

我正在自学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" };
    }
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; }

}
然后实例化类,如下所示:

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

}
我如何确保塔科泰姆队继承自塔科球员,皮特队继承自皮特球员

我的感觉是,我不理解如何为这种情况正确地定义类,我希望有人能指点一下应该如何做

为了澄清这些元素之间的关系,我将“玩家”改为“所有者”,这更好地代表了我的想法。我可以进一步为“玩家”添加一个类来代表真正的玩家,而不是纸上谈兵的玩家

通过@neoistheone和@McGarnagle的输入,我能够修改这一点,并将这些类定义为:

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" };
    }
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();
    }
static void Main(字符串[]args)
{
联盟MyLeague=新联盟(){name=“联盟”};
所有者taco=newowner(){FirstName=“taco”,LastName=“MacArthur”,OwnerGuid=Guid.NewGuid()};
所有者pete=newowner(){FirstName=“pete”,LastName=“Eckhart”,OwnerGuid=Guid.NewGuid()};
Team tacoTeam=new Team(){TeamGuid=Guid.NewGuid(),TeamName=“密码是Taco”,League=MyLeague,TeamOwner=Taco};
Team peteTeam=new Team(){TeamGuid=Guid.NewGuid(),TeamName=“3-Pete”,League=MyLeague,TeamOwner=Pete};
列表团队=新列表();
添加(塔科泰姆);
团队。添加(团队);
foreach(团队中的团队){
WriteLine(“团队名称:\t{0}\n团队所有者:\t{1}\n团队名称:\t{2}\n-----”,
team.TeamName,team.TeamOwner.FirstName+“”+team.TeamOwner.LastName,team.League.name);
}
Console.ReadLine();
}

这似乎可以很好地帮助我在代码中对数据进行建模,使它更容易地进出我正在处理的数据库,以便与此应用程序配合使用。

类继承意味着一种“is-a”关系。例如,你不希望球员继承联赛,因为这意味着球员就是联赛

相反,你需要的是组合——联盟由团队组成,团队由球员组成。您可以通过创建类成员来表示合成。类
团队
应该有一个成员,该成员是类
玩家
的集合,依此类推。例如:

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

这种说法至少可以说很奇怪:

我如何确保塔科泰姆队继承自塔科球员,皮特队继承自皮特球员

事实是,继承不一定与您创建的对象有任何关系。球队从球员那里继承。。。就这样

我有点困惑这个问题是从哪里来的,尽管我想指出这种继承很奇怪:

class Team : Player
我不认为一支球队会从一名球员那里继承什么。你确定你应该继承吗


这样想吧。正如其他人所指出的,继承意味着一种“是一种”关系。说一个团队就是一个球员是没有意义的,说一个球员就是一个团队也是没有意义的。一个队由运动员组成。这并不意味着应该有任何继承。

在本例中,您误用了继承。考虑形状的简单例子。
class Shape
{
    Color Color { get; set; }
}

class Rectangle : Shape
{
    double SideA { get; set; }
    double SideB { get; set; }
}

class Square : Rectangle
{
}
你可以看到一个正方形是一个矩形,一个矩形是一个正方形。这三种颜色都有。矩形有两组相等的边。Square还有一些其他更具体的属性

您的结构应该遵循以下几点:

class League
{
    public Team[] Teams { get; set; }
}

class Team
{
    public League League { get; set; }
    public Player[] Players { get; set; }
}

class Player
{
    public Team Team { get; set; }
}

退一步,想想它在现实生活中是如何工作的。一个
联盟
有一个或多个
球队
s,一个
球队
有一个或多个
球员
s。这就是您想要构建类的方式:

class League
{
    public string name { get; set; }
    public List<Team> Teams { get; set; }
}

class Team
{
    public Guid TeamGuid { get; set; }
    public string TeamName { get; set; }
    public List<Player> Players { get; set; }
}

class Player
{
    public Guid PlayerGuid { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

你看,不是每个球员都有铲球,而是一个后卫。你可以进一步抽象,但我只想举个例子。

我不确定你是否完全理解继承。在这种情况下,实际上并没有

一个联盟将由一群球队组成,一支球队将由一群球员组成

class League
{
    public string name { get; set; }
    public List<Team> Teams { get; set; }
}

class Team
{
    public Guid TeamGuid { get; set; }
    public string TeamName { get; set; }
    public List<Player> Players { get; set; }
}

class Player
{
    public Guid PlayerGuid { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

继承与对象的特定实例无关。您提供的示例没有意义,这些类不应该相互继承。另外,联盟非常有趣。我想你完全误解了什么是继承…+1。。。我还要说团队“包含”球员,而不是“组成”。。。但可能是更好的词(假设球队“拥有”球员,并且没有其他像“AllPlayersInTheCountry”这样拥有球员的收藏)谢谢大家在这方面的投入。我不明白继承是如何运作的。我想我知道如何实现我现在追求的目标。