Je veux savoir si une classe hérite d'une autre, vaut-il mieux que les classes partagent un objet verrou défini dans la classe de base ou un objet verrou défini à chaque niveau d'héritage.Quelle est la meilleure pratique pour utiliser le verrou dans les classes héritées?
Un exemple très simple d'un objet de verrouillage à chaque niveau de la classe
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;
}
}
}
}
Un exemple très simple d'un objet verrou partagé
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;
}
}
}
}
Quel exemple est le meilleur moyen de gérer le verrouillage dans une classe héritée?
.NET Reflector trouve 106 (!) Occurrences d'une propriété 'ThisLock' dans les assemblys que j'ai chargés. Donc, je suppose que cela peut être appelé à juste titre * meilleure pratique *. :-) – dtb