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。

提前感谢 ,马塞洛巴西<.

C# 属性上的循环引用

我想

我会添加一个复合(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 属性移出玩家类,并将其移动到 GameBoardTeam类。

如果你有一个Team类,你可能甚至不需要在你的Player上有一个Partner属性,你会有一个Team属性。

将以下内容作为第一行添加到您的二传手:

if (points == value && partner.Points == value) return

这应该会停止您的无限递归。