क्योंकि वस्तुओं को कम से कम व्युत्पन्न से व्युत्पन्न से बनाया गया है, इसलिए उन्हें व्युत्पन्न न किए गए सबसे अधिक व्युत्पन्न से नीचे फेंकना होगा।
व्युत्पन्न वर्ग बेस क्लास के बारे में जानता है, लेकिन बेस क्लास व्युत्पन्न कक्षा के बारे में नहीं जानता है। यदि आप ऑब्जेक्ट को कम से कम व्युत्पन्न कक्षा से सबसे व्युत्पन्न कक्षा में फाड़ देंगे, तो बेस क्लास उन चीजों को हटा देगा जो व्युत्पन्न वर्ग को प्रक्रिया में आवश्यकता हो सकती है।
उदाहरण के लिए विचार करें कि आधार वर्ग वस्तुओं की एक सूची है:
public class MyBase {
public List<SomeObject> list;
public MyBase(){
list = new List<SomeObject>();
list.Add(new SomeObject());
list.Add(new SomeObject());
list.Add(new SomeObject());
}
~MyBase() {
foreach (SomeObject obj in list) {
obj.Cleanup();
}
list.Clear();
}
}
व्युत्पन्न वर्ग सूची में प्रत्येक आइटम के लिए कुछ कहते हैं:
public class MyDerived : MyBase {
public MyDerived() {
foreach (SomeObject obj in list) {
obj.SomeProperty = new Handler();
}
}
~MyDerived(){
foreach (SomeObject obj in list) {
obj.SomeProperty.Cleanup();
}
}
}
जब वस्तु गिराया गया है, व्युत्पन्न वर्ग को जो भी जोड़ा गया है उसे साफ करने के लिए सूची तक पहुंच की आवश्यकता है। यदि आधार वर्ग को पहले नष्ट कर दिया गया था, तो व्युत्पन्न वर्ग को सूची में वस्तुओं तक पहुंच नहीं होगी।
(हालांकि ध्यान दें कि IDisposable
सामान्य रूप से वस्तुओं की नियंत्रित सफाई को संभालने के लिए एक बेहतर विकल्प है।)
कल्पना कीजिए कि आप एक बड़ा संरचना dissasembling रहे हैं। आप छोटे हिस्सों से शुरू होते हैं और –
ऊपर जा रहे हैं धन्यवाद। हाय क्यूओंग, मेरे प्रश्न में सुधार के लिए धन्यवाद :-) –