我想知道一個類是否從另一個類繼承,讓類共享一個在基類中定義的鎖對象或擁有一個鎖對象在每個繼承級別定義。什麼是在繼承類中使用鎖的最佳做法
一個非常簡單的對類的每個電平的鎖定對象的示例
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;
}
}
}
}
共享鎖定對象的一個非常簡單的例子
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;
}
}
}
}
哪個例子是管理鎖定的首選方式在繼承類中?
.NET反射器在我裝入的程序集中發現了106個(!)的「ThisLock」屬性。所以我想這可以合理地稱爲*最佳做法*。 :-) – dtb 2010-05-21 15:14:34