静态只读对象如何变为空? (我已将 _lock 对象设置为静态而非静态,但始终只读。)
validate 方法有几次工作正常,然后在它被调用 2-3 次后 _lock 对象为空。这是否表明该锁由另一个线程拥有?
最佳答案
除了反射之外,this(更具体地说,通过初始化程序分配的静态变量上的空引用异常)可能发生的另一种方式是,如果您在类的其他地方定义了静态构造函数由于某种原因将该值设置为 null,例如:
class Program
{
class A
{
private static readonly object _lock = new object();
public void Validate()
{
lock (_lock) // NullReferenceException here...
{
Console.WriteLine("Not going to make it here...");
}
}
static A()
{
Console.WriteLine(_lock.ToString());
Console.WriteLine("Now you can see that _lock is set...");
_lock = null;
}
}
static void Main(string[] args)
{
var a = new A();
a.Validate();
}
}
关于c# - 空只读锁对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161037/