2009-03-10 13 views
12

फ्रेमवर्क डिजाइन दिशानिर्देश (2 एड, पेज 327।) का कहना है के साथ निपटाने पैटर्न लागू करना सीखें:पास विधि सही ढंग से (CA1063)

Dispose() के अलावा, विधि Close() कराने पर विचार करें, अगर पास मानक है क्षेत्र में शब्दावली।

ऐसा करने पर, यह महत्वपूर्ण है कि आप बंद करें कार्यान्वयन Dispose के समान बंद करें और IDisposable.Dispose विधि को स्पष्ट रूप से लागू करने पर विचार करें।

CA1816: Microsoft.Usage:

public class SomeClass : IDisposable { 
    private SomeDisposable someInnerDisposable; 

    public void Open() { 
     this.someInnerDisposable = new SomeDisposable(); 
    } 

    void IDisposable.Dispose() { 
     this.Close(); 
    } 

    public void Close() { 
     this.Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool disposing) { 
     if (disposing) { 
      this.someInnerDisposable.Dispose(); 
      this.someInnerDisposable = null; 
     } 
    } 
} 

FxCop पसंद करने के लिए है कि नहीं लगता है:

तो, प्रदान की उदाहरण का पालन करना, मैं इस वर्ग मिल गया है 'SomeClass .Close() 'कॉल' GC.SuppressFinalize (ऑब्जेक्ट) ', एक विधि जिसे आम तौर पर केवल' IDISposable.Dispose 'के कार्यान्वयन के भीतर बुलाया जाता है। अधिक जानकारी के लिए IDisposable पैटर्न का संदर्भ लें।

CA1816: माइक्रोसॉफ्ट.उज: 'GC.SuppressFinalize (ऑब्जेक्ट)' को कॉल करने के लिए 'SomeClass.IDisposable.Dispose()' बदलें। यह ऑब्जेक्ट के निपटारे के बाद ऑब्जेक्ट के अनावश्यक अंतिमकरण को रोक देगा और यह दायरे से बाहर हो गया है।

CA1063: माइक्रोसॉफ्ट। डिज़ाइन: 'SomeClass.IDisposable.Dispose()' को संशोधित करें ताकि यह निपटान (सत्य) को कॉल कर सके, फिर GC.Suppress को कॉल करें वर्तमान ऑब्जेक्ट इंस्टेंस ('यह' या 'मी' में Visual Basic), और फिर लौटता है।

CA1063: माइक्रोसॉफ्ट। डिज़ाइन: 'SomeClass.IDisposable का नाम बदलें।' का निपटान करें() 'का निपटान करें' और सुनिश्चित करें कि इसे सार्वजनिक और मुहरबंद घोषित किया गया है।

  • मैं करीब विधि सही ढंग से निपटाने पैटर्न कैसे लागू करते हैं?

-या-

  • मैं चेतावनी कैसे दबाने करते हैं?

मैं

[SuppressMessage("Microsoft.Design", "CA1063:ImplementIDisposableCorrectly", 
    Justification = "Framework Design Guidelines say it's ok.")] 
void IDisposable.Dispose() 
{ 
    this.Close(); 
} 

की कोशिश की लेकिन FxCop 1.36 अब भी उन्हें रिपोर्ट।

संपादित:

CA1063: Microsoft.Design: इसके चारों ओर के रूप में सुझाव बदलने से वह सभी लेकिन इस चेतावनी को समाप्त 'निपटान' के लिए ') SomeClass.IDisposable.Dispose (' का नाम बदलें और यह सुनिश्चित करना है कि सार्वजनिक और मुहरबंद के रूप में घोषित किया गया।

संपादित 2: CODE_ANALYSIS वास्तव में याद आ रही थी। धन्यवाद।

उत्तर

15

इसे बदलें।

बंद करें() इसे कॉल करें।निपटान() और बंद करें() विधि के बजाय तर्क() विधि में तर्क डालें। संपादन के बाद

------------------- आगे की जानकारी ---------------

इसके अलावा, बदल रहा है घोषणा:

public void Dispose() 

अन्य त्रुटि से छुटकारा पाना चाहिए। यह घोषित रूप में आप के बाद से:

void IDisposable.Dispose() 

यह सार्वजनिक रूप में चिह्नित नहीं है और सील, और FxCop शिकायत। व्यक्तिगत रूप से, मैं उन्हें दबाने की बजाय त्रुटियों से बचना पसंद करता हूं।

1

मैं चेतावनियों को कैसे दबा सकता हूं?

SuppressMessage() केवल तभी काम करता है जब आप एक सशर्त संकलन प्रतीक के रूप में CODE_ANALYSIS ध्वज निर्दिष्ट करते हैं।

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