Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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# 在c中实例化一个单例#_C#_Design Patterns - Fatal编程技术网

C# 在c中实例化一个单例#

C# 在c中实例化一个单例#,c#,design-patterns,C#,Design Patterns,我试图用c#中的单例来实例化一个对象 我还有一个IDLState类,它正在mario的构造函数中实例化: public IdleState() { mario = Mario.Instance; Console.WriteLine(mario); } 我的singleton中的_instance变量始终保持为空,因此它不断返回mario的新实例,这与我希望它做的正好相反。我不知道该如何解决这个问题。你有一个循环依赖性。。。 当实例化一个M

我试图用c#中的单例来实例化一个对象

我还有一个IDLState类,它正在mario的构造函数中实例化:

    public IdleState()
    {
        mario = Mario.Instance;
        Console.WriteLine(mario);
    }

我的singleton中的_instance变量始终保持为空,因此它不断返回mario的新实例,这与我希望它做的正好相反。我不知道该如何解决这个问题。

你有一个循环依赖性。。。
当实例化一个Mario时,您实例化一个调用Mario的IDLState。实例实例化一个新的Mario并重复。

“似乎发生的是,我的singleton中的_Instance变量始终保持null,因此它不断返回Mario的新实例,”如果是这样,则
Instance
属性将返回null,不是
Mario的新实例。我认为我们需要返回一步,弄清楚为什么每次都会创建一个新的
Mario
实例。您的
实例
属性确实创建了一个单例(尽管不是线程安全的)。给定您发布的代码,您最终应该会得到一个
StackOverflowException
,并且永远不会看到
Mario.Instance
属性返回。但是您的问题描述没有提到这一点,如果您遇到异常,您可以查看堆栈跟踪,查看递归调用,并亲自查看错误。那么,你到底看到了什么问题?请提供一个好的、更具体、更清晰的问题描述。
    public IdleState()
    {
        mario = Mario.Instance;
        Console.WriteLine(mario);
    }