内部带有静态实例的类

时间:2013-02-08 10:43:06

标签: c# visual-studio design-patterns

public class MyClass
{
    // private fields


    //////////////////////////////////////////////////////////////////////////
    public MyClass(string param1, string param2)
    {
        // do some stuff
    }

    private static object syncRoot = new Object();
    private static volatile MyClass instance = null;

    public static MyClass  Log
    {
        get
        {
            if (instance == null)
            {
                lock (syncRoot)
                {
                    if (instance == null)
                        instance = new MyClass();
                }
            }

            return instance;
        }
    }

    private MyClass()
    {
        // do some stuff
    }

    public void myFunction(string txt, uint flags)
    {
         // do some stuff
    }
}

这是我的班级,我这样用它

    MyClass.Log.myFunction("some string", flags);

但是当我在其他类函数中使用此类时,不断得到MyClass为null或MyClass.Log为null。

我做错了什么?

除了这里的问题是我得到的错误:

 System.NullReferenceException: Object reference not set to an instance of an object.
   at MyNamespace.MyClass..ctor()
   at MyNamespace.MyClass.get_Log()

1 个答案:

答案 0 :(得分:0)

您展示的代码看起来不错 MyClass不能是null,因为它是一个类。 Log也不应该是null,您的单例实现看起来还不错。

我的猜测是问题是您使用的是MyClass的无参数构造函数。我猜myFunction以某种方式使用只在构造函数中初始化的东西,它接受两个参数。

实际上,根据您的堆栈跟踪,问题出在无参数构造函数中。我想你正试图在那里记录一些东西,比如:instance.Log(...);。这不起作用,因为此时instance仍为null。您只需使用Log(...)代替。