2009-07-03 14 views
9

यह कोड होने के बाद:क्या हमें एक ब्लॉक में सी # बाइनरीवाइटर या बाइनरी रीडर बंद करने की आवश्यकता है?

using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create))) 
{ 
    //save something here 
} 

क्या हमें बाइनरीवाइटर को बंद करने की आवश्यकता है? यदि नहीं, क्यों?

+0

इस तथ्य के बावजूद कि यह एक अलग प्रकार है, यह http://stackoverflow.com/questions/1070667/is-is-necessary-to-dispose-dbcommand-after-use/ का डुप्लिकेट है। मैं बंद करने के लिए वोट दूंगा, लेकिन दिन के लिए मेरी सीमा तक पहुंच गया है। मेरा सुझाव है कि हमें उस वर्ग को निपटाने की ज़रूरत नहीं है, जिसे मुझे लागू करने वाले प्रत्येक वर्ग के लिए आईडीस्पोजेबल "प्रश्न लागू किया जाना चाहिए। कृपया अपने पसंदीदा आईडीस्पोजेबल प्रश्न के डुप्लिकेट के रूप में बंद करने के लिए वोटिंग पर विचार करें। –

+0

जो वास्तव में आपको लगता है कि यह एक प्रलेखन/एपीआई डिज़ाइन दोष है: जब आप स्पष्ट गलतियां करते हैं तो संकलक आपको चेतावनी देना चाहिए, और दस्तावेज़ीकरण को स्पष्ट रूप से लेबल करना चाहिए जो बंद() कॉल निपटान के बराबर हैं (और, अधिमानतः, कोई भी नहीं है ऐसी बंद() कॉल जो पहली जगह पूरी तरह से अनावश्यक हैं)। –

उत्तर

18

जब तक यह सभी using ब्लॉक में लपेटा गया है तो आपको स्पष्ट रूप से Close पर कॉल करने की आवश्यकता नहीं है।

using ब्लॉक यह सुनिश्चित करेंगे कि वस्तु निपटान किया जाता है, और Close और Dispose तरीकों BinaryWriter पर परस्पर विनिमय कर रहे हैं। (Close विधि सिर्फ Dispose पर्दे के पीछे कहते हैं।)

4

आपके पास मौजूद कोड के साथ यह ब्लॉक का उपयोग करने के बाद फ़ाइल बंद कर देगा, इसलिए आपको निकटता से कॉल करने की आवश्यकता नहीं है।

उपयोग कथन का उपयोग न करने का एकमात्र कारण यह होगा कि यदि आप अपने बाइनरीवाइटर के साथ फ़ाइल के बाद भी खुले रहना चाहते हैं, तो इस मामले में आपको इसे संदर्भित करने के बजाय इसके संदर्भ में होना चाहिए उस तरह के निर्माता।

4

अपने कोड उदाहरण के अनुसार एक बयान का उपयोग करने में यह लाना निपटान, जो अंतर्निहित धारा बंद कर देता है फोन करेगा, इसलिए कोई। आप परावर्तक के माध्यम से देख सकते हैं:

protected virtual void Dispose(bool disposing) 
{ 
    if (disposing) 
    { 
     this.OutStream.Close(); 
    } 
} 
0

ब्लॉक का उपयोग घटा देती द्विआधारी लेखक को बंद करने और एक राज्य में रख GC'ed किया जाना है। अपवाद हैंडलिंग और स्ट्रीम को बंद करने के लिए ब्लॉक का उपयोग सिंटेक्टिक चीनी है।

0

लेखक को एक प्रयोग ब्लॉक में लपेटकर, लेखक का निपटारा होने पर बंद हो जाएगा। तो इस मामले में, आपको लेखक को स्पष्ट रूप से बंद करने की आवश्यकता नहीं है।

संबंधित मुद्दे