从派生类到基类

时间:2011-10-18 11:19:18

标签: c# class subclass simulation

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

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

team fb = new team("fb");
forward alex = new forward(fb.tName, "alex", 73, 77, 77, 69, 70);

我的团队课程:

  public class team
{
    public string tName;

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

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

前进课程:

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

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

我想要的是自动化流程。例如,我创建了一个团队..添加了玩家,我希望通过团队名称来调用所有玩家的影响力。我将给出球队的名字和位置名称,这将给予我在该球队所选位置的球员的平均影响力。

我该怎么做?

提前感谢...

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

3 个答案:

答案 0 :(得分:2)

前锋IS A团队? 根本没有...一个团队有前进......

不要使用继承...而是使用组合。

答案 1 :(得分:1)

玩家不是团队,这会给你一个想法

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

答案 2 :(得分:0)

我建议重新考虑你的遗产策略 当一个类继承另一个时,这意味着子类'是'基类。将此应用于您的模型意味着前锋'是'团队'没有多大意义。实际上,一支球队'有'前锋' 一个更准确的模型,你想要实现的是将一个玩家类作为你的foward类,后卫类等继承的基类。然后,您的团队类可以包含一组玩家类。