Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Singleton实例返回null_C#_Oop_Singleton - Fatal编程技术网

C#Singleton实例返回null

C#Singleton实例返回null,c#,oop,singleton,C#,Oop,Singleton,我正在用C#开发一个国际象棋应用程序 我已经将ChessBoard实现为一个单例类,其中包含棋子的定义。我可以从不同的类访问ChessBoard实例。我甚至创建了一个测试类,看看是否可以访问ChessBoard实例,这证明是成功的 但是,在我的ROOK类中,当我尝试访问ChessBoard实例时,它返回null。以下是棋盘类的代码: public sealed class ChessBoard { static readonly ChessBoard instance = new Che

我正在用C#开发一个国际象棋应用程序

我已经将ChessBoard实现为一个单例类,其中包含棋子的定义。我可以从不同的类访问ChessBoard实例。我甚至创建了一个测试类,看看是否可以访问ChessBoard实例,这证明是成功的

但是,在我的ROOK类中,当我尝试访问ChessBoard实例时,它返回null。以下是棋盘类的代码:

public sealed class ChessBoard 
{
   static readonly ChessBoard instance = new ChessBoard();

   static ChessBoard() 
   { }

   ChessBoard() 
   { }

   public static ChessBoard Instance
   {
      get
      {
         return instance;
      }
   }

   /* And some other methods and properties */
}
但是当我从ROOK类调用ChessBoard实例时,它返回null。这是ROOK课程:

public class ROOK : IPiece
{
   public int posx, posy;
   public int side;
   public List<Position> PossibleMoves = new List<Position>();

   public ROOK(int color, int x, int y)
   {
      posx = x;
      posy = y;
      side = color;
      UpdateMoveList();
   }

   public bool IsInLimits(int x, int y)
   { }

   public void UpdateMoveList()
   {
      ChessBoard boardinstance = ChessBoard.Instance;
      if (boardinstance == null) { MessageBox.Show("NULL"); }
      else
      { }
   }
}    

如前所述,只有在ROOK类中,ChessBoard实例才会返回null。在其他类中,它不返回null。有什么建议吗?

我真的不知道你为什么要把棋盘设计成单人棋盘。很明显,你只想要一个,但是没有必要这样强迫你。此外,一辆车也可以是一辆车。这给人的印象是,你有一个骑士,一个棋子和一辆车!!!!!交叉检查可能是另一个
棋盘
类。@SriramSakthivel不可能,因为我只有一个棋盘class@Magus我是C#中OOP的新手,在很多地方都看到它是作为单例实现的。我知道这不是必须的,但我正在考虑处理ChessBoard类中的所有状态检查和函数。并且做一个虽然主函数中的循环一直运行到它的draw或checkmate,但我的观点是,如果您没有一个非常特定的用例,例如需要保持打开的文件流,则不应该使用单例。我和许多其他人都会说,即使这样,你也应该尝试找到另一种方式。
public interface IPiece
{
   IsInLimits(int x, int y);
   void UpdateMoveList();
}