1
Answer

Singleton Troubles

Ask a question
Colin Basnett

Colin Basnett

16y
3.5k
1
I've used Singletons in Java, but I just can't seem to get it right with C#.  I get a TypeInitializationException on the Checkers.Game class.  Here's my code...

using System;
using System.Collections.Generic;
using System.Text;

namespace Checkers
{
    class Program
    {
        public static void Main()
        {
            Game _Game = Game.Instance;
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace Checkers
{
    public sealed class Game
    {
        private static Game _Instance = new Game();
        private Board _Board = Board.Instance;
        private Player[] _Players = new Player[2];

        public static Game Instance
        {
            get
            {
                return _Instance;
            }
        }
        public Board Board
        {
            get
            {
                return _Board;
            }
            set
            {
                _Board = value;
            }
        }
        public Player[] Players
        {
            get
            {
                return _Players;
            }
            set
            {
                _Players = value;
            }
        }

        private Game()
        {
            Players[0] = new Player(Player.Directions.Down);
            Players[1] = new Player(Player.Directions.Up);
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace Checkers
{
    public sealed class Board
    {
        private static Game _Game = Game.Instance;
        private static Board _Instance = new Board();
        private Piece[,] _Pieces = new Piece[8, 8];

        public static Board Instance
        {
            get
            {
                return _Instance;
            }
        }
        public Piece[,] Pieces
        {
            get
            {
                return _Pieces;
            }
            set
            {
                _Pieces = value;
            }
        }

        private Board()
        {
            int X;
            int Y;

            for (X = 0; X < 8; X++)
            {
                for (Y = 0; Y < 2; Y++)
                {
                    Pieces[X, Y] = new Piece(X, Y, _Game.Players[0]);
                }
            }
        }
    }
}

The exception I get is...

System.TypeInitializationException was unhandled
  Message="The type initializer for 'Checkers.Game' threw an exception."
  Source="Checkers"
  TypeName="Checkers.Game"
  StackTrace:
       at Checkers.Game.get_Instance()
       at Checkers.Program.Main() in C:\Documents and Settings\cbasnett\My Documents\Visual Studio 2005\Projects\Checkers\Checkers\Program.cs:line 11
       at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()


Answers (1)