我想知道一个类是否继承自另一个类,最好让类共享一个在基类中定义的锁对象,或者在每个继承级别定义一个锁对象.
这个类的每个级别上的一个锁定对象的一个非常简单的例子
public class Foo {
private object thisLock = new object();
private int ivalue;
public int Value {
get {
lock( thisLock ) {
return ivalue;
}
}
set {
lock( thisLock ) {
ivalue= value;
}
}
}
}
public class Foo2: Foo {
private object thisLock2 = new object();
public int DoubleValue {
get {
lock( thisLock2 ) {
return base.Value * 2;
}
}
set {
lock( thisLock2 ) {
base.Value = value / 2;
}
}
}
}
public class Foo6: Foo2 {
private object thisLock6 = new object();
public int TripleDoubleValue {
get {
lock( thisLock6 ) {
return base.DoubleValue * 3;
}
}
set {
lock( thisLock6 ) {
base.DoubleValue = value / 3;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
共享锁对象的一个非常简单的示例
public class Foo {
protected object thisLock = new object();
private int ivalue;
public int Value {
get {
lock( thisLock ) {
return ivalue;
}
}
set {
lock( thisLock ) {
ivalue= value;
}
}
}
}
public class Foo2: Foo {
public int DoubleValue {
get {
lock( thisLock ) {
return base.Value * 2;
}
}
set {
lock( thisLock ) {
base.Value = value / 2;
}
}
}
}
public class Foo6: Foo2 {
public int TripleDoubleValue {
get {
lock( thisLock ) {
return base.DoubleValue * 3;
}
}
set {
lock( thisLock ) {
base.DoubleValue = value / 3;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个示例是在继承类中管理锁定的首选方法?
dtb*_*dtb 11
您可以在.NET Framework中经常使用属性而不是字段找到第二个选项(例如,CommunicationObject.ThisLock属性):
public class Foo {
private readonly object thisLock = new object();
private int ivalue;
protected object ThisLock {
get {
return thisLock;
}
}
public int Value {
get {
lock( ThisLock ) {
return ivalue;
}
}
set {
lock( ThisLock ) {
ivalue= value;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class Foo2: Foo {
public int DoubleValue {
get {
lock( ThisLock ) {
return base.Value * 2;
}
}
set {
lock( ThisLock ) {
base.Value = value / 2;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)