繁体   English   中英

内部带有静态实例的类

[英]Class with static instance inside

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM