【问题标题】:Is it possible to lock an overloaded bracket operator?是否可以锁定重载的括号运算符?
【发布时间】:2017-03-05 21:19:21
【问题描述】:

假设我有

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

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

【问题讨论】:

    标签: c# multithreading thread-safety locking


    【解决方案1】:

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

    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 ...;
            }
        }
    }
    

    【讨论】:

    • OK 是的,出于某种原因,我的印象是您可以锁定一个函数以使其不被调用,但似乎事实并非如此。不过,这正是我正在寻找的,谢谢。
    • 轻微的术语改进:你不能锁定属性,你锁定对象
    猜你喜欢
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2017-08-15
    • 2015-01-01
    • 2012-09-04
    • 2010-10-20
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多