是否为锁使用受保护的字段(或者我可以在不添加辅助方法的情况下避免受保护的锁,如获取锁等)

本文关键字:受保护 情况下 方法 获取 字段 或者 是否 我可以 添加 | 更新日期: 2023-09-27 18:16:36

我理解不建议将此用于锁,因为对象可以在类外修改,这很难控制。因此,总是建议对锁使用私有字段。(我已经看了:为什么锁(这个){…坏?)

受保护的锁呢?我认为我应该很好,因为我的类是内部的,没有人可以从我的程序集之外的它们派生…

请注意,我不能使用派生类和基类单独的锁,因为在多个类中很难管理,可能会发生死锁。

internal class Base
{
    protected object sync = new object();
    public string Foo
    {
        get
        {
            lock (sync)
            {
                //set it
            }
        }
    }
}
internal class Derived : Base
{
    public string Bar
    {
        get
        {
            lock (sync)
            {
                //set it
                //try to  get "Foo" (if i use seperate locks-syncobjects
                // in derived and base class there can be a ptoential deadlock)
            }
        }
    }
}

是否为锁使用受保护的字段(或者我可以在不添加辅助方法的情况下避免受保护的锁,如获取锁等)

你应该为每个字段使用锁对象,我认为这将解决你的问题。

如果你想用同一个锁对象锁定对所有字段的访问,那么你建议在基类 中实现锁机械化。

Protected会导致与public相同的问题,因为你不知道谁将继承你的类。例如,如果在获取某个值时,您希望使用基类中的其他字段,则会失败。

So - protected is bad also