2010-10-26 21 views
12

MSDN Libraryउलझन का उपयोग कर "का उपयोग" वक्तव्य सी #

using Statement (C# Reference)
Defines a scope, outside of which an object or objects will be disposed.

लेकिन के अनुसार मैं इस कोड यहाँ कुछ उपयोगकर्ता द्वारा पोस्ट हो गया और मैं इस बारे में उलझन में है: (कृपया कोड पर मेरी टिप्पणी देखें)

using (OleDBConnection connection = new OleDBConnection(connectiongString)) 
      { 
       if (connection.State != ConnectionState.Open) 
        connection.Open(); 
       string sql = "INSERT INTO Student (Id, Name) VALUES (@idParameter, @nameParameter)"; 

       using (OleDBCommand command = connection.CreateCommand()) 
       { 
        command.CommandText = sql; 
        command.CommandType = CommandType.Text; 

        OleDBParameter idParameter = command.CreateParameter(); 
        idParameter.DbType = System.Int32; 
        idParameter.Direction = Parameterdirection.Input; 
        idParameter.Name = "@idParameter"; 
        idParameter.Value = studentId; 

        OleDBParameter nameParameter = command.CreateParameter(); 
        try 
        { 
         command.ExecuteNonQuery(); 
        } 
        finally 
        { 
         // Is it still necessary to dispose these objects here? 
         command.Dispose(); 
         connection.Dispose(); 
        } 
       } 
      } 

उपरोक्त कोड में, using कथन का सही ढंग से उपयोग किया जाता है? मैं उलझन में हूं, क्या कोई भी कृपया बता सकता है कि using कथन और इसकी स्कॉइंग का उपयोग कैसे करें और कब, कहां और इसका उपयोग क्यों करें। धन्यवाद ..

उत्तर

10

उपयोग कथन मैन्युअल रूप से try/finally ब्लॉक डालने के लिए एक शॉर्टेंड है।

तो

using(x){ 
    ... 
} 

रूप

try{ 
    ... 
}finally{ 
    if(x != null){ x.Dispose(); } 
} 

एक ही है और जब वे एक ही संकलित आईएल उत्पन्न होगा।

कंपाइलर आपको xIDisposable लागू नहीं करने में त्रुटि देगा।

+0

वास्तव में अगर (x! = Null) {((IDISposable) x)।();(); } - स्टेटमेंट (सी # संदर्भ) का उपयोग http://bit.ly/acmoOD –

+0

मुझे यह दुख हुआ कि सिर्फ इसलिए कि मैंने आपके जवाब को एक मिनट पहले (वर्तमान में) दो बार वोट दिया है, यह SO के लिए अच्छा नहीं है , आपका प्रश्न किसी भी तरह से मेरा से कम नहीं है, लेकिन क्योंकि आपने पर्याप्त तेज़ी से आकर्षित नहीं किया है (शायद) मेरे ऊपर नहीं बढ़ेगा। – Motti

+0

इस तरह एसओ इस तरह से काम करता है जिस तरह से मुझे लगता है, और मुझे यकीन नहीं है कि इसके लिए त्वरित "ठीक" है या नहीं। अफसोस की बात है, यह अच्छी तरह से सोचा लोगों के बजाय त्वरित जवाब बनाने को बढ़ावा देता है। मैं खुद को अक्सर एक त्वरित उत्तर लिखता हूं, भले ही मुझे पता है कि मुझे बाद में इसे संपादित करने की आवश्यकता होगी, पूरी तरह से डूबने के लिए। मैंने थोड़ी देर के लिए इस बारे में सोचा है, और मेरे पास एक सुझाव है कि एक प्रश्न पोस्ट करने के बाद, 10 मिनट के लिए कोई जवाब नहीं दिखाया जाएगा, और फिर 10 मिनट के बाद इस समय सीमा में लिखे गए सभी उत्तरों को यादृच्छिक क्रम में दिखाया गया है एक ही टाइमस्टैम्प। एक अच्छा विचार हो सकता है;) –

11

finally ब्लॉक (और इस प्रकार इस मामले try में) अनावश्यक है, कि क्या using करता है, यह IDisposable वस्तु जिसके साथ यह आरंभ नहीं हो जाता पर Dispose कॉल using ब्लॉक समाप्त होता है (अपवाद की परवाह किए बिना या उसके अभाव)।

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