C# 属性上的循环引用
本文关键字:循环 引用 属性 | 更新日期: 2023-09-27 18:17:35
也许这是一个新手问题,但它就在这里。我正在开发一款纸牌游戏,我有一个名为 Player 的类......玩家有一个名为合作伙伴(另一个玩家(的属性和另一个称为积分的属性。
public class Player
{
public Player()
{
}
public Player Partner { get; set; }
private int points = 0;
public int Points
{
get { return points;}
set {
if (Partner != null) Partner.Points = value;
points = value;
} // -> Here is the problem cause p1.Partner = p2 and p2.Partner = p1
}
问题是:如何最"优雅的方式"为玩家设置积分属性并自动设置其合作伙伴积分属性?
例如:
Player p1 = new Player();
Player p2 = new Player();
p1.Partner = p2;
p2.Partner = p1;
p1.Points = 10;
int p = p2.Points
p 应等于 10。
提前感谢 ,马塞洛巴西<.
我想
我会添加一个复合(thx @ noah(类"团队"。
团队具有"玩家"和"积分"的属性。
public class Team
{
public Player[] Players { get; set; } //or Player1 and Player2, depends
public int Points { get; set; }
}
}
set {
points = value;
if (Partner != null && Partner.Points != value)
{
Partner.Points = value;
}
}
将修复循环引用,但拥有一个他们都引用的Partnership
对象来获得总分会更干净,并允许每个玩家存储他们获得的个人分数。
将 Points
属性移出玩家类,并将其移动到 Game
、Board
或Team
类。
如果你有一个Team
类,你可能甚至不需要在你的Player
上有一个Partner
属性,你会有一个Team
属性。
将以下内容作为第一行添加到您的二传手:
if (points == value && partner.Points == value) return
这应该会停止您的无限递归。