gpt4 book ai didi

c# - 静态锁是否适用于不同的子类?

转载 作者:太空狗 更新时间:2023-10-29 19:53:59 25 4
gpt4 key购买 nike

如果我有

abstract class Parent
{
static object staticLock = new object();

public void Method1()
{
lock(staticLock)
{
Method2();
}
}

protected abstract Method2();
}

class Child1 : Parent
{
protected override Method2()
{
// Do something ...
}
}

class Child2 : Parent
{
protected override Method2()
{
// Do something else ...
}
}

调用 new Child1().Method1()new Child2().Method1() 会使用相同的锁吗?

最佳答案

是的。派生类不会从基类获取静态数据的副本。

但是,通用 类不是这种情况。如果你说:

class Base<T>
{
protected static object sync = new object();
...
}

class Derived1 : Base<int> { ... }
class Derived2 : Base<int> { ... }
class Derived3 : Base<string> { ... }
class Derived4 : Base<string> { ... }
class Derived5 : Base<object> { ... }
class Derived6 : Base<object> { ... }

Derived1 和 Derived2 的实例具有相同的同步对象。 Derived3 和 Derived4 的实例具有相同的同步对象。 Derived5 和 Derived6 的实例具有相同的同步对象。但是这三个同步对象都是不同的对象。

关于c# - 静态锁是否适用于不同的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9198087/

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