是否可以锁定重载的支架操作员?

时间:2017-03-05 21:19:22

标签: c# multithreading thread-safety locking

让我说我有

class a {
    public bool this[int index] { ... }
}

我如何lock()此运营商?例如,如果有人试图调用aInst[4],它会阻塞,直到lock()块完成执行?

1 个答案:

答案 0 :(得分:2)

我不确定问题是什么 - 您发布的代码只是一个索引器属性。在该属性的主体中,您可以锁定与任何其他属性或方法中的对象相同的对象。

class a
{
    private readonly object _lock = new object();
    public bool this[int index]
    {
        get
        {
            lock (_lock)
            {
                return ...;
            }
        }
        set
        {
            lock (_lock)
            {
                ... = value
            }
        }
    }

    public string AMethod()
    {
        lock (_lock)
        {
            return ...;
        }
    }
}