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()
答案 0 :(得分:0)
您展示的代码看起来不错
MyClass
不能是null
,因为它是一个类。 Log
也不应该是null
,您的单例实现看起来还不错。
我的猜测是问题是您使用的是MyClass
的无参数构造函数。我猜myFunction
以某种方式使用只在构造函数中初始化的东西,它接受两个参数。
实际上,根据您的堆栈跟踪,问题出在无参数构造函数中。我想你正试图在那里记录一些东西,比如:instance.Log(...);
。这不起作用,因为此时instance
仍为null
。您只需使用Log(...)
代替。