簡體   English   中英

C#屬性的循環引用

[英]Circular Reference On C# Properties

可能這是一個新手問題,但這是。 我正在開發紙牌游戲,並且有一個名為Player的類。Player具有一個名為Partner(另一個Player)的屬性和另一個名為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 Points屬性?

例如:

Player p1 = new Player();
Player p2 = new Player();
p1.Partner = p2;
p2.Partner = p1;
p1.Points = 10;
int p = p2.Points

p應該等於10

在此先感謝Marcelo Brazil <。

我想我會添加一個復合(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

這應該停止您的無限遞歸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM