Chcę wiedzieć, czy jedna klasa dziedziczy po innej, czy lepiej jest, aby klasy dzieliły obiekt blokady zdefiniowany w klasie bazowej lub obiekt blokady określone na każdym poziomie spadku.Co to jest najlepsza praktyka używania blokady w odziedziczonych klasach
Bardzo prosty przykład obiektu blokady na każdym poziomie klasy
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;
}
}
}
}
Bardzo prosty przykład obiektu udostępnionego blokady
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;
}
}
}
}
Które przykładem jest preferowanym sposobem zarządzania blokowania w obrębie dziedziczonej klasy?
. Reflektor .NET znajduje 106 (!) Wystąpień właściwości 'ThisLock' w wczytanych złożeniach. Sądzę, że można to słusznie nazwać * najlepszą praktyką *. :-) – dtb