父类的C#属性继承

Piz*_*uru 2 c# inheritance list parent

我希望我的Player对象继承锦标赛中的筹码总和.我得到了(尝试除以零.)我认为这是因为它无法从父级Tournament对象继承Chips.为什么这不起作用?

public partial class Form1 : Form
{
    public Tournament Tournament { get; set; }

    public Form1()
    {
        InitializeComponent();

        Tournament = new Tournament();
        Tournament.PlayerList.Add(new Player("Hero", 5000));
        Tournament.PlayerList.Add(new Player("Villain1", 3000));
        Tournament.PlayerList.Add(new Player("Villain2", 4000));

        MessageBox.Show(Tournament.PlayerList[0].StackPercentage.ToString());
    }
}

public class Tournament
{
    public List<Player> PlayerList { get; set; }
    public int Chips
    {
        get
        {
            return PlayerList.Sum(S => S.Stack);
        }
    }

    public Tournament()
    {
        PlayerList = new List<Player>();
    }
}

public class Player : Tournament
{
    public string ID { get; set; }
    public int Stack { get; set; }
    public double StackPercentage
    {
        get
        {
            return Stack / Chips;
        }
    }

    public Player(string _ID, int _Stack)
    {
        ID = _ID;
        Stack = _Stack;
    }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ler 6

你不应该从锦标赛中派出玩家.通过这样做,你说每个玩家都是一个锦标赛.

尝试这样的事情:

public interface IPlayer {}

public abstract class Player : IPlayer 
{
  public ITournament CurrentTournament { get; set; }
}

public class PokerPlayer : Player 
{
  public PokerPlayer() {}
  public int CurrentChips { get; set; }

  public double StackPercentage 
  {
    get { return this.CurrentChips / (PokerTournament)this.CurrentTournament.StartingChips; }
  }
}

public interface ITournament {}

public abstract class Tournament : ITournament
{
  public List<Player> Players { get; set; }
  public int PlayerCount { get { return this.Players.Count; } }
}

public class PokerTournament : Tournament 
{
  private PokerTournament() {}
  public PokerTournament(int startingChips)
  { 
    if(startingChips < 1) throw new ArgumentException("Invalid starting amount.", "startingChips");
    this.StartingChips = startingChips; 
  }

  public int StartingChips { get; set; }
}
Run Code Online (Sandbox Code Playgroud)