वाह। यहां बहुत सारे प्रश्न हैं!
मुझे आईडीस्पोजेबल का उपयोग कब करना चाहिए? केवल तभी जब मेरे पास अप्रबंधित संसाधन हैं?
IDisposable
आमतौर पर संसाधनों को साफ करने के लिए प्रयोग किया जाता है, लेकिन जरूरी है कि सभी को इसके लिए अच्छा है नहीं है। यह एक सामान्य पैटर्न है जिसे आप उपभोग करने वाले वस्तु को सूचित करने के लिए करते हैं।
using(var timer = new MyTimer())
{
//do some stuff
}
इस मामले में, "टाइमर बताने के लिए ठीक है, मैं जिस तरह से Dispose
बुला जरूरी नहीं कि कोई संसाधनों को रिहा नहीं किया गया है, यह सिर्फ एक सुविधाजनक & संगत है: एक उदाहरण एक टाइमर है (एक पैटर्न के लिए दो चाबियाँ!) अब आपके साथ किया गया है "और टाइमर समय रोक सकता है, और शायद कहीं समय रिकॉर्ड कर सकता है।
अंगूठे का एक और अच्छा नियम यह है कि यदि आपको किसी भी कारण से अंतिम रूप देने की आवश्यकता है, तो आपको आमतौर पर IDisposable
उसी दिनचर्या तक पहुंच प्रदान करनी चाहिए ताकि उपभोक्ता वर्ग जीसी पर इंतजार करने के बजाए कक्षा को अंतिम रूप देने का विकल्प चुन सके। ।
निपटान पैटर्न की क्या भिन्नताएं हैं और वे क्यों भिन्न होते हैं?
सिर्फ एक ही असली "विशिष्ट" IDisposable
कार्यान्वयन के प्रकार मैं के बारे में पता कर रहा हूँ है - अंतिम रूप/निपटान पैटर्न:
public class MyClass : IDisposable
{
void IDisposable.Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// Free other state (managed objects).
}
// Free your own state (unmanaged objects).
// Set large fields to null.
}
~MyClass()
{
Dispose(false);
}
}
क्या आम अप्रबंधित संसाधनों मैं के बारे में पता होना चाहिए रहे हैं?
कोई भी चीज जो IDisposable
लागू करता है, विशेष रूप से नेट पुस्तकालयों में, अप्रबंधित संसाधनों के हैंडल करने के लिए मान लिया जाना चाहिए और निपटारा किया जाना चाहिए। आम तौर पर आप इनके माध्यम से केवल अप्रबंधित संसाधनों तक पहुंच पाएंगे। यदि नहीं, तो आप जान लेंगे - आम तौर पर ड्राइवर या कुछ बनाते हैं।
क्या यह गलत है या आईडीआईएसओपेबल लागू करने के लिए भ्रामक है?
यह अत्यधिक उपयोग करने के लिए व्यर्थ हो सकता है, लेकिन सीधे हानिकारक नहीं है।
फेंक चाहिए कॉल कभी एक साथ
एक वर्ग श्रृंखलित जा केवल किसी भी IDisposables कि वह आंतरिक रूप से बनाता है निपटाने चाहिए। यदि इसमें डिस्पोजेबल निर्भरताएं हैं जिन्हें कक्षा के दायरे से बाहर इंजेक्शन या लाइव किया गया था, तो आपको उन्हें कभी निपटाना नहीं चाहिए।
महान उत्तर! अच्छा श्रीमान सोचा! – Firoso