मैं जानना चाहता हूं कि एक वर्ग दूसरे से विरासत में है या नहीं, क्या कक्षाओं को बेस क्लास में परिभाषित लॉक ऑब्जेक्ट साझा करना या लॉक ऑब्जेक्ट होना बेहतर है प्रत्येक विरासत स्तर पर परिभाषित किया गया। वर्ग के प्रत्येक स्तर पर एक ताला वस्तु कीविरासत कक्षाओं के भीतर लॉक का उपयोग करने के लिए सबसे अच्छा अभ्यास क्या है
एक बहुत ही सरल उदाहरण
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 (!) घटनाएं मिलती हैं। तो मुझे लगता है कि इसे सही तरीके से * सर्वश्रेष्ठ अभ्यास * कहा जा सकता है। :-) – dtb