首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从派生类到基类

从派生类到基类
EN

Stack Overflow用户
提问于 2011-10-18 19:19:18
回答 3查看 145关注 0票数 0

我正在尝试创建一个足球模拟程序。我有一个名为"team“的主类和4个名为"goalKeeper”、"defender“、"forward”和"midfielder“的派生类。

我正在根据他们的位置来创造球员。例如:

代码语言:javascript
复制
team fb = new team("fb");
forward alex = new forward(fb.tName, "alex", 73, 77, 77, 69, 70);

我的团队类:

代码语言:javascript
复制
  public class team
{
    public string tName;

    public team(string tName)
    {
        this.tName = tName;

    }
    public string teamInfo()
    {
        return tName;
    }
}

转发类:

代码语言:javascript
复制
class forward:team
{
    //özellikler
    public string pName;
    public string pPosName;
    public int finishing;
    public int longShots;
    public int composure;
    public int offTheBall;
    public int firstTouch;

    public forward(string tName, string pName, int finishing, int longShots, int composure, int offTheBall, int firstTouch)
        : base(tName)
    {
        this.pName = pName;
        this.pPosName = "Forward";
        this.finishing = finishing;
        this.longShots = longShots;
        this.composure = composure;
        this.offTheBall = offTheBall;
        this.firstTouch = firstTouch;

    }

    //etkiyi hesapla
    public double influence
    {
        get
        {
            //calculations

            return processed;
        }
    }

    //futbolcunun genel bilgileri
    public void playerInfo()
    {
        Console.WriteLine( "\n##############################\n" + pName + "-" + tName + "-" + pPosName + "\n" + "Finishing= " + finishing + "\n" + "Long Shots= " + longShots + "\n" + "Composure= " + composure + "\n" + "Off the ball= " + offTheBall + "\n" + "Frist Touch= " + firstTouch + "\n##############################\n");
    }
}

正如你所看到的,我正在根据每个玩家的技术属性来计算他们的影响力。

我想要的是自动化这个过程。例如,我创建了一个团队..增加了玩家,我希望所有玩家的影响力都可以通过球队的名字来调用。我会给出球队的名字和位置的名字,它会给我在球队选择的位置上的球员的平均影响力。

我该怎么做呢?

先谢谢你...

注意:我的代码可能看起来很愚蠢。我是新手:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-18 19:30:29

球员不是一个团队,这会给你一个概念。

代码语言:javascript
复制
public class Team
{
  private IList<Player> _players
  ...
}

public class Player
{
  public string Name {get;set;}

  public abstract Influence { get; }
}

public class Forward : Player
{
  public override Influence
  {
    get { return //calculation }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2011-10-18 19:24:34

一个前锋就是一个团队?一点也不。一个球队有一个前锋..。

不要使用继承...请改用组合。

票数 2
EN

Stack Overflow用户

发布于 2011-10-18 19:24:52

我建议重新考虑你的继承策略。

当一个类继承另一个类时,这意味着子类‘是’基类。将这一点应用到你的模型中,意味着一个前锋是一个没有太大意义的团队。事实上,一支球队“有”一个(或多个)前锋。

对于你正在尝试实现的目标,一个更准确的模型是让一个player类作为你的基类,你的foward类,defender类等继承自它。然后,您的team类可以包含一个player类的集合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7806380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档