我经常看到有人说“如果你需要朋友/内部那么你的设计是错误的”,有人可以告诉我如何重新设计以下代码以消除 ChessPiece.Location 中的内部?
目前使用它是为了向 ChessBoard 添加棋子设置 ChessPiece.Location 属性以匹配,显然将其公开会比内部更糟糕,并且将其设为私有会阻止 ChessBoard 更新位置。感谢您的任何见解。
public struct Coord
{
public Coord(int x, int y) { this.X = x; this.Y = y; }
public int X { get; private set; }
public int Y { get; private set; }
}
public class ChessBoard
{
public ChessBoard() { /*[...]*/ }
public ChessPiece this[int x, int y]
{
get
{
// Return ChessPiece at this position (or null)
}
set
{
// Add ChessPiece at this position and set its Location property
}
}
public class ChessPiece
{
public ChessPiece() { /*[...]*/ }
public Coord Location { get; internal set; }
}