可能这是一个新手问题,但在这里。 我正在开发一个纸牌游戏,我有一个名为Player的类... 玩家拥有一个名为Partner(另一个玩家)的属性和另一个名为Points的属性。
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
}
问题是:如何为玩家设置Points属性以及自动设置其Partner点属性,这是“最优雅的方式”?
例如:
Player p1 = new Player();
Player p2 = new Player();
p1.Partner = p2;
p2.Partner = p1;
p1.Points = 10;
int p = p2.Points
p应该等于10.
提前致谢, 马塞洛 巴西<
答案 0 :(得分:4)
我想我会添加一个复合(thx @ noah)类“Team”。
团队拥有“玩家”和“积分”的属性。
public class Team
{
public Player[] Players { get; set; } //or Player1 and Player2, depends
public int Points { get; set; }
}
}
答案 1 :(得分:2)
set {
points = value;
if (Partner != null && Partner.Points != value)
{
Partner.Points = value;
}
}
将修复循环引用,但拥有一个Partnership
对象,他们都指的是获得总积分将更清晰,并允许每个玩家存储他们已经得分的各个点。
答案 2 :(得分:1)
将Points
属性移出播放器类,并将其移至Game
,Board
或Team
类。
如果你有一个Team
课程,你可能甚至不需要Partner
上的Player
属性,而是拥有Team
属性。< / p>
答案 3 :(得分:0)
将以下内容添加到您的setter的第一行:
if (points == value && partner.Points == value) return
这应该可以阻止你的无限递归。