Eri*_*rix 4 c# interface c#-4.0
困惑,可能会遗漏一些简单的东西..
我有
var q = new Queue<object>();
lock (q.SyncRoot)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我明白了
Queue<T> does not provide a defintion for SyncRoot blah blah...
Run Code Online (Sandbox Code Playgroud)
但是,Queue<T>
实现ICollection
其定义SyncRoot
为公共财产.
所以,首先,为什么这是隐藏的.其次,如何隐藏正在实现的接口的属性?
您可以通过显式实现它来隐藏属性:
object MyQueue.SyncRoot { get; set; }
Run Code Online (Sandbox Code Playgroud)
它是隐藏的,因为它已被弃用:
我们发现基于SyncRoot的同步API在大多数情况下都不够灵活.API允许线程安全访问集合的单个成员.问题是,有许多场景需要锁定多个操作(例如删除一个项目并添加另一个项目).换句话说,通常是使用想要选择(并且可以实际实现)正确同步策略的集合的代码,而不是集合本身.我们发现SyncRoot实际上很少使用,并且在使用它的情况下,它实际上并没有增加太多价值.如果没有使用它,对ICollection的实施者来说只是一个烦恼.