मेरे पास कुछ प्रश्न हैं जिसके लिए मुझे उचित उत्तर नहीं मिल रहा है।जब हमें कोई विनाशक नहीं है तो हम SuppressFinalize को क्यों कॉल कर सकते हैं
1) जब हम विनाशक नहीं होते हैं तो हम निपटान समारोह में SuppressFinalize क्यों कॉल कर सकते हैं।
2) ऑब्जेक्ट कचरा एकत्र करने से पहले संसाधनों को मुक्त करने के लिए निपटान और अंतिम रूप का उपयोग किया जाता है। चाहे यह प्रबंधित या अप्रबंधित संसाधन है, हमें इसे मुक्त करने की आवश्यकता है, फिर हमें निपटान समारोह के अंदर एक शर्त की आवश्यकता क्यों है, जब हम इस ओवरराइड फ़ंक्शन को आईडीस्पोजेबल से कॉल करते हैं तो 'सत्य' कहें: अंतिम रूप से बुलाए जाने पर गलत तरीके से निपटें और पास करें।
नीचे दिए गए कोड को मैंने नेट से कॉपी किया है।
class Test : IDisposable
{
private bool isDisposed = false;
~Test()
{
Dispose(false);
}
protected void Dispose(bool disposing)
{
if (disposing)
{
// Code to dispose the managed resources of the class
}
// Code to dispose the un-managed resources of the class
isDisposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
क्या होगा अगर मैं बूलियन संरक्षित कार्य को हटा दें और नीचे के रूप में लागू करें।
class Test : IDisposable
{
private bool isDisposed = false;
~Test()
{
Dispose();
}
public void Dispose()
{
// Code to dispose the managed resources of the class
// Code to dispose the un-managed resources of the class
isDisposed = true;
// Call this since we have a destructor . what if , if we don't have one
GC.SuppressFinalize(this);
}
}
हाय जॉन, बस नाइटपिकिंग, लेकिन "जो कुछ भी संसाधन धारण करता है वह सीधे उससे निपट सकता है", शायद उस बिंदु पर जोर देने के लिए "इससे निपटने" के लिए "(यानी" कर सकते हैं "->" होगा ") होना चाहिए यह बाहरी वर्ग की नौकरी बिल्कुल संभालने के लिए नहीं है। –
एक और सवाल, सिस्टम के बाद से। ऑब्जेक्ट सभी ऑब्जेक्ट्स का आधार है, जो डिफ़ॉल्ट रूप से एक अंतिम विधि लागू होती है, भले ही हमने विनाशक प्रदान नहीं किया है, जीसी ने इसे अंतिम कतार में नहीं रखा है? या हम क्यों कहते हैं कि यदि हम एक विनाशकारी वस्तु प्रदान नहीं करते हैं तो अंतिम कतार में नहीं रखा जाएगा? क्योंकि विरासत संरक्षित सदस्यों के आधार पर व्युत्पन्न वर्ग के निजी सदस्यों की तरह हैं। – somaraj
क्या गैर-तुच्छ माता-पिता वर्ग से प्राप्त उप-वर्ग के लिए कोई वैध कारण है यदि क्लीनर फ़ाइनलज़र है तो माता-पिता नहीं करते हैं? मैं किसी भी मामले के बारे में नहीं सोच सकता जहां व्युत्पन्न वर्ग के लिए किसी भी अप्रबंधित संसाधनों को अपनी कक्षा में शामिल करने के लिए बेहतर नहीं होगा, इसके अपने अंतिम फाइनलर को पूरी तरह से मुख्य से अलग किया जाएगा। असल में, यहां तक कि अगर कोई चाहता है कि "अलार्म घंटी" फाइनलाइज़र है, तो व्युत्पन्न कक्षा में फाइनलाइज़र जोड़ने के बजाय, * * को अपनी कक्षा में शामिल करना बेहतर हो सकता है। – supercat