子类需要基类的属性信息
本文关键字:属性 信息 基类 子类 | 更新日期: 2023-09-27 18:18:54
下面是我尝试完成的代码。
public partial class Form1 : Form
{
public List<Player> Players { get; set; }
public Form1()
{
InitializeComponent();
Players = new List<Player>();
Players.Add(new Player() { ID = "Hero", Stack = 1000 });
Players.Add(new Player() { ID = "Villain", Stack = 500 });
MessageBox.Show(Players[0].Chipleader.ToString());
}
}
public class Player
{
public string ID { get; set; }
public int Stack { get; set; }
public bool Chipleader
{
get
{
// Dependent on the stacks of the other players
return Stack == Players.Max(S => S.Stack);
}
}
}
我希望每个玩家对象都有一个属性"Chipleader",如果该玩家拥有最大的堆栈,则表示为true。玩家对象需要其他玩家的属性(基类中的玩家列表)才能做到这一点。我需要这个属性在Player类中的原因是因为我使用ObjectListView在listview中列出我的播放器对象。我希望有人能告诉我一个简单/合乎逻辑的方法来做这件事。
通常情况下,你的"游戏"将管理哪个玩家处于领先地位,而不是其他玩家。让一个类需要了解其他类才能正常工作,这通常是一个糟糕的设计。
相反,我建议让你的"游戏"(表单)包含一个Chipleader属性,返回玩家在领先,即:
public Player Chipleader
{
get { return Players.OrderByDescending(s => s.Stack).FirstOrDefault(); }
}
如果你真的需要这个在Player上,创建一个方法,像这样:
public bool IsChipLeader(Form1 game)
{
// Maybe include check that "this" is part of the game...
return this.Stack == game.Players.Max(s => s.Stack);
}
(我还建议将游戏逻辑移动到它自己的"Game"类中,并将其封装在表单中,而不是将游戏逻辑放在Form1中)