gpt4 book ai didi

c# - 子类需要基类中的属性信息

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:57 25 4
gpt4 key购买 nike

这是显示我试图完成的代码。

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

我希望每个 Player 对象都有一个属性“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);
}

(我还建议将游戏逻辑移动到它自己的“游戏”类中,并将其封装在表单中,而不是将游戏逻辑放在 Form1 中)

关于c# - 子类需要基类中的属性信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com