空读只读锁定对象

时间:2014-11-27 00:09:08

标签: c#

静态只读对象如何变为空? (我将_lock对象设置为静态而非静态,但总是只读。)

validate方法可以正常工作几次,然后在调用2-3次后,_lock对象为null。这是一个指示锁是否由另一个线程拥有?

enter image description here

1 个答案:

答案 0 :(得分:-4)

除了反射之外, 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();
    }
}