类,其中包含静态实例

本文关键字:静态 实例 包含 | 更新日期: 2023-09-27 17:58:13

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

类,其中包含静态实例

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

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

实际上,根据堆栈跟踪,问题在无参数构造函数内部。我猜你正试图在那里登录一些东西,比如:instance.Log(...);。这不会起作用,因为此时instance仍然是null。您应该简单地使用Log(...)