0
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()
4

1 回答 1

0

您显示的代码看起来不错。
MyClass不能null因为它是一门课。Log也不应该null,你的单例实现看起来不错。

我的猜测是,问题在于您使用的是MyClass. 我猜想以myFunction某种方式使用仅在采用两个参数的构造函数中初始化的东西。

Actually, according to your stack trace the problem is inside the parameterless constructor. I guess you are trying to log something in there, like this : instance.Log(...);. That won't work, because at that point instance is still null. You should simply use Log(...) instead.

于 2013-02-08T10:51:40.850 回答