2009-12-26 5 views
38

आईडीस्पोजेबल को लागू करते समय, मैंने यह भी कहा कि ऑब्जेक्ट के निपटारे के बाद बुलाए जाने वाले प्रत्येक विधि को ObjectDisposedException फेंकना चाहिए। लेकिन नाम वस्तु के लिए मानक क्या है जिसे अपवाद के निर्माता को पास किया जाना चाहिए?ऑब्जेक्टनाम के रूप में ऑब्जेक्टनाम को फेंकने पर क्या किया जाना चाहिए?

उत्तर

39

मेरा मानना ​​है कि सिफारिश की अभ्यास निम्नलिखित फेंकने के लिए है:

throw new ObjectDisposedException(GetType().FullName); 

या जांच, प्रत्येक विधि इसकी आवश्यकता है (जाहिर नहीं Dispose विधि ही) है कि के शीर्ष पर कोड की इन दो पंक्तियों जिनमें शामिल हैं:

if (this.disposed) 
    throw new ObjectDisposedException(GetType().FullName); 

भी प्रयोज्य के लिए एक छोटे से विधि में इस refactor करने के लिए उपयोगी हो सकता है।

+0

इसके अलावा, कृपया इस प्रश्न और सामान्य दिशानिर्देशों के लिए मेरा उत्तर देखें: http://stackoverflow.com/questions/668440/handling-objectdisposedexception-correctly-in-an-idisposable-class-hierarchy – Noldorin

1

मुझे विश्वास नहीं है कि इसके लिए एक मानक है, मैं ऑब्जेक्ट के प्रकार को एक अद्वितीय पहचान क्षेत्र (एक प्रकार की 'प्राथमिक कुंजी') की स्ट्रिंग सामग्री के साथ वापस कर दूंगा।

12

यहां तक ​​कि .NET Framework स्वयं भी बहुत संगत नहीं है।

[C#] 
private void CheckDisposed() 
{ 
    throw new ObjectDisposedException(GetType().FullName); 
} 
:

इस प्रकार के विशिष्ट उपयोग निम्नलिखित की तरह कुछ है:

डेविड एम कीन (माइक्रोसॉफ्ट पर FxCop टीम पर पूर्व डेवलपर) MSDN documentation for the ObjectDisposedException में कोई टिप्पणी जोड़ी

+0

मुझे याद आया। म्यूट दस्तावेज में टिप्पणियों को भी पढ़ना सीखें। – Wilhelm

+0

चिंता न करें, यह अभी चला गया है। –

+1

@ जोनाथन रेनहार्ट: टिप्पणी को पृष्ठ के .NET 4-संस्करण से स्पष्ट रूप से हटा दिया गया था। मैंने ऊपर दिए गए लिंक को ठीक किया है, इसलिए यह .NET 3.5-संस्करण को संदर्भित करता है जिसमें उद्धृत टिप्पणी शामिल है। – Albic

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