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得ません。シングルトンの実装は問題ないようです。nullLognull

私の推測では、問題は、のパラメーターなしのコンストラクターを使用していることですMyClassmyFunctionどういうわけか、2 つのパラメーターを取るコンストラクターでのみ初期化されるものを使用していると思います。

実際、スタック トレースによると、問題はパラメータなしのコンストラクタ内にあります。次のように、そこに何かをログインしようとしていると思います: instance.Log(...);。その時点instanceではまだnull. Log(...)代わりに単に使用する必要があります。

于 2013-02-08T10:51:40.850 に答える