2012-04-11 7 views
8

मुझे ऑब्जेक्ट संदर्भ संभावित रूप से एक नल संदर्भ अपवाद फेंकने पर चेतावनियां प्राप्त करने का एक तरीका चाहिए, ताकि मैं इनके लिए रक्षात्मक कोड लिख सकूं।संभावित शून्य ऑब्जेक्ट संदर्भों के लिए स्थिर कोड सत्यापन उपलब्ध है?

मैंने रिशेर्पर को देखा है, लेकिन वहां कुछ भी नहीं देखा जो इसे पूरा करता है।

कोड अनुबंध शायद एक गैर स्टार्टर है; आवेदन काफी बड़ा है, और यह कोड अनुबंध आधिकारिक रूप से उपलब्ध होने से पहले .NET 3.5 में लिखा गया है।

+0

क्या यह हमेशा यह देखने के लिए आसान नहीं होगा कि ऑब्जेक्ट का संदर्भ 'शून्य' है या नहीं? आप एक और मार्ग भी जा सकते हैं, और यह सुनिश्चित कर सकते हैं कि आप जिस वस्तु का उपयोग करते हैं, वह शून्य नहीं हो सकता है। –

+1

* हर * ऑब्जेक्ट संदर्भ के लिए? : ओ उनमें से कुछ कभी शून्य नहीं होंगे (वे कन्स्ट्रक्टर में सेट हैं)। –

+0

भले ही आप कोड अनुबंध का उपयोग नहीं कर रहे हैं, आपको अपनी विधियों की शुरुआत में गार्ड क्लॉज लिखना चाहिए। – jason

उत्तर

3

रिसार्पर वास्तव में ऐसा कुछ पूरा करता है। संभावित NullReferenceExpections को नीले रंग में आईडीई में हाइलाइट किया जाता है, टूलटिप्स के साथ जब आप उन पर होवर करते हैं।

enter image description here

Resharper तो यह की अपनी निरीक्षण परिणाम विंडो (विजुअल स्टूडियो के संकलक त्रुटियों और चेतावनियों से अलग) संभावित त्रुटियों और चेतावनियों का ट्रैक रखता है।

enter image description here

+0

क्या वे विश्लेषण चेतावनियों की सूची में दिखाई देंगे? यह संभव है कि उन्हें अन्य चेतावनियों के समुद्र में दफनाया जा रहा है। –

+0

ओह, मैं देखता हूं कि आपका क्या मतलब है। वे वीएस त्रुटि सूची में प्रकट नहीं होंगे; Resharper नेविगेशन और कोड मुद्दों के ट्रैक रखने के लिए अपनी खिड़की रखती है। तदनुसार मेरा जवाब अपडेट कर रहा है। – raveturned

+1

@RobertHarvey क्या आपने ReSharper का उपयोग कर समाप्त किया? मैंने अभी परीक्षण की कोशिश की है, यह देखने के लिए कि क्या यह एक समान नल-मुद्दे (यह करता है) पर उठाता है, लेकिन डिफ़ॉल्ट रूप से यह मुझे समाधान के लिए कुछ हज़ार चेतावनियां/त्रुटियां देता है, जिनमें से कई मैं नहीं करता देखभाल के बारे में। – Stijn

0

सामान्य शब्दों में, जब तक आप विशेष रूप से एक वस्तु प्रारंभ, यह हमेशा संभावित एक अशक्त वस्तु संदर्भ, कम से कम जहाँ तक संकलक का संबंध है फेंकने के लिए हो सकता है।

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

+0

ठीक है, मुझे हर * समय संकलित करने की आवश्यकता नहीं है। अधिकांशतः, मैं "फर्स्ट-मौका" अपवादों की तलाश में हूं, ऐसी परिस्थितियों में जहां कोई ऑब्जेक्ट प्रारंभ नहीं होता है, लेकिन बाद में इसे शून्य पर सेट किया जा सकता है (शायद ही कभी, अगर ऐसा होता है)। –

0

मैं कोड में उपलब्ध प्रत्येक फ़ील्ड और प्रत्येक विधि के अंदर नल के खिलाफ अंधेरे से बचाव के विचार के खिलाफ हूं।

नीचे दी गई सहायता मुझे जहां शून्य मान के खिलाफ जांच करने के लिए बारे में निर्णय लेने:

1- कौन अपने तरीके लागू किया जाएगा?
यदि कोई विधि निजी है और आपके पास इसका नियंत्रण है कि इसका उपयोग कैसे किया जा रहा है, तो मुझे यह नहीं लगता कि यह शून्य जांचों के विरुद्ध सुरक्षा के लिए समझ में आता है जब तक कि यह शून्य मानों की अपेक्षा करने के लिए विधि के तर्क का हिस्सा न हो। यदि कोई विधि सार्वजनिक (जैसे एपीआई) के सामने आती है, तो निश्चित रूप से शून्य जांच एक बड़ी चिंता होनी चाहिए।

2- सॉफ्टवेयर डिजाइन:
छवि है आप method1(fromAnimalToString(animal)); बुला और किसी कारण fromAnimalToString() के लिए कर रहे हैं कभी नहीं अशक्त रिटर्न (हालांकि कोई रिक्त स्ट्रिंग के बजाय वापस कर सकती है)।
तो इस तरह के मामले में, यह Method1 में animal != null() के शरीर की जांच करने के कोई मतलब नहीं होगा

3 परीक्षण:
सॉफ्टवेयर इंजीनियरिंग में, यह सब संभव परिदृश्यों कि कभी भी कर सकते हैं परीक्षण करने के लिए लगभग असंभव है निष्पादित। हालांकि, सामान्य और वैकल्पिक परिदृश्यों का परीक्षण करें और सुनिश्चित करें कि प्रवाह अपेक्षित है।

+0

मैं पूछ रहा हूं क्योंकि मैंने परियोजना को दो बार परीक्षण करने के लिए रिलीज़ किया है, और शून्य संदर्भ अपवाद सामने आए हैं जो मेरे विकास परीक्षण में स्पष्ट नहीं थे। –

+0

मुझे लगता है कि एक आदर्श वातावरण में, डेवलपर्स बग घटना को कम करने के लिए अपनी पूरी कोशिश करते हैं। जटिल प्रणाली के मामले में, यह परिदृश्य डेवलपर्स का उत्पादन करने की कोशिश करने के लिए क्यूए का काम है, जो कि ऐसा नहीं सोचते थे कि वैकल्पिक परिदृश्य क्यूए चरण के दौरान पाए जा सकते हैं जो संभावित नलपोइंटर अपवादों का कारण बन सकता है। ऐसे मामलों में, यह शून्य के खिलाफ जांचने के लिए पर्याप्त नहीं हो सकता है, लेकिन पैरामीटर को शून्य के रूप में आने के कारण उचित तार्किक उपायों को भी लेना पर्याप्त नहीं हो सकता है। – SiN

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