gpt4 book ai didi

c# - 对锁使用 protected 字段是否可以(或者我可以避免 protected 锁而不添加辅助方法,如获取锁等。在基础中)?

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:45 46 4
gpt4 key购买 nike

我知道不建议将它用于锁,因为对象可以在类之外修改,而这很难控制。因此,始终建议使用私有(private)字段进行锁定。 (我看过:Why is lock(this) {...} bad?)

protected 锁呢?我认为我应该很好,因为我的类(class)是内部的,没有人可以从我的程序集之外派生...

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

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 相同的问题,因为您不知道谁将从您的类继承。例如,如果在获取某些值时想要使用基类中的其他字段,则会失败。

所以 - protected 也是不好的

关于c# - 对锁使用 protected 字段是否可以(或者我可以避免 protected 锁而不添加辅助方法,如获取锁等。在基础中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16890436/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com