2010-05-04 14 views
6

Here's नियम यह है कि है कि मैं समझने की कोशिश कर रहा हूँ की एक विवरण नहीं होना चाहिए। यहाँ सरल कोड है कि कोड विश्लेषक के बारे में शिकायत की गई थी:CA1034: नेस्टेड प्रकार दिखाई

Public Class CustomerSpeed 

    Public Enum ProfitTypeEnum As Integer 
     NotSpecified = 0 
     FlatAmount = 1 
     PercentOfProfit = 2 
    End Enum 

    Private _ProfitTypeEnum As ProfitTypeEnum 

    Public Sub New(ByVal profitType As ProfitTypeEnum) 

     _ProfitTypeEnum = profitType 

    End Sub 

End Class 

enum केवल वर्ग से संबंधित है, तो क्यों यह एक बुरी बात यह वर्ग के भीतर एक निहित प्रकार बनाने के लिए है? मेरे लिए neater लगता है ...

किसी को भी पता है क्या निम्न पंक्ति ?:

नेस्टेड प्रकार सदस्य पहुँच की धारणा है, जो कुछ प्रोग्रामर स्पष्ट रूप से

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

उत्तर

4

useability और खोज योग्यता मुद्दों पहले से ही अन्य प्रतिक्रियाओं में शामिल करने के अलावा, वहाँ भी एक संभावित रख-रखाव मुद्दा है। उस दिन क्या होता है जब आप पाते हैं कि आपका enum भी कहीं और उपयोगी है? इसे अपने मूल वर्ग से बाहर ले जाना एक तोड़ने वाला परिवर्तन होगा, इसकी प्रतिलिपि बनाने से इसकी अपनी रखरखाव की समस्याएं सामने आ जाएंगी, और एपीआई उपभोक्ताओं को किसी अन्य वर्ग के साथ इसका उपयोग करने की आवश्यकता होगी बदसूरत हो जाना शुरू हो जाएगा। व्यवस्थित रूप से नेस्टेड enums से परहेज करके इन संभावित समस्याओं से बचें क्यों नहीं?

+0

जैसा कि आप जानते हैं कि मैंने जो कुछ लिखा है, मैंने पर्याप्त रूप से पढ़ा है, मैंने खोज क्षमता या प्रयोज्यता तर्क नहीं खरीदा है, क्योंकि इंटेलिसेंस 2010 के बजाए वीएस2005 में काम करता है, मुझे नहीं लगता था कि या तो कोई मुद्दा था।लेकिन आपकी नई पीटी, मैं बिल्कुल सहमत हूं। मैंने इसे अपने आप पर संक्षेप में माना लेकिन ध्यान केंद्रित किया क्योंकि यह किसी के द्वारा नहीं लाया गया था। मुझे स्वीकार करना होगा कि उस तर्क के लिए रक्षा नहीं है और बाद में एक होने की उम्मीद नहीं है, इसलिए ... मैं अकेले इस आधार पर आश्वस्त हूं। ऐसा लगता है कि कक्षाओं में enums एम्बेड नहीं करने के लिए पर्याप्त कारण है। धन्यवाद! – ChadD

1

मैं इसे इंगित करता है कि नेस्टेड प्रकार स्थिर चर के साथ भ्रमित किया जा सकता है, क्योंकि वे दोनों के बाद IntelliSense में (स्वत: पूर्ण) दिखाई देगा। "" लगता है।

भले ही आप .NET के बीसीएल (बेस क्लास लाइब्रेरी) को देखते हैं, सभी enums, भले ही वे केवल एक वर्ग में उपयोग किए जाते हैं, वे घोंसला नहीं हैं, कारण है, जब आप तुलना करना चाहते हैं या तत्काल, कक्षा नाम + "।" + enum नाम नीचे दिखाए गए भ्रमित होंगे, माइक्रोसॉफ्ट भी सही है कि यह लोगों को भ्रमित करेगा।

- उदाहरण

class RootClass 
{ 
    enum NestedEnum 
    { 
     StaticItem = 0  
    } 

    static string NestedString = ""; 
} 


RootClass.NestedEnum <-- represents enum, 
RootClass.NestedString <-- represents static variable 

एक एक प्रकार है और अन्य चर रहा है, सबसे एमएस कोड विश्लेषक चेतावनी, बेहतर डिजाइन के लिए कर रहे हैं लेकिन यह @George के लिए एक बड़ा अपवाद है, यदि आप इसे पसंद नहीं, न इसका इस्तेमाल करें, बस आगे बढ़ें और चेतावनियों को अक्षम करें। आप नामस्थानों के बजाय निश्चित रूप से बड़े वर्ग के नामों का उपयोग कर सकते हैं, इसकी बस आपकी पसंद है। लेकिन अच्छे प्रोग्रामिंग कौशल इस बारे में है कि दूसरों को आपके कोड को कैसे प्राप्त करें बल्कि आपको क्या पसंद है !!!

और नामस्थान वहाँ व्यवस्थित करने के लिए कर रहे हैं और हम कम टाइप का आयोजन करके, thats क्या सभी के बारे में कम प्रयासों के साथ अधिक काम कर रही। लेकिन अगर आपको टाइप करने के लिए बड़े नाम पसंद हैं, तो कोई भी आपको रोक नहीं रहा है।

+0

बड़ा टाइप करने के लिए? मैन, .NET ढांचा नामस्थानों का एक बड़ा पेड़ है। जब नाम किसी और को टाइप करने का कारण बनता है तो नाम रिक्त स्थान का उपयोग क्यों करें?जवाब है, मुझे लगता है, "उन्हें व्यवस्थित करने के लिए ताकि आप सामान पा सकें!" कक्षा में enums क्यों अलग हैं? उनका अनुशंसित समाधान व्यवस्थित करने के लिए नेमस्पेस का उपयोग करना है। यह दृष्टिकोण आवश्यक टाइपिंग के एएमटी को कम नहीं करता है लेकिन किसी कारण से यह "पसंदीदा" है। तो, आपके बनाने के बिंदु पर, मैं इसे नहीं खरीदता। जहां तक ​​नेस्टेड प्रकार को एक स्थिर प्रकार के साथ भ्रमित कर रहा है - सुनिश्चित नहीं है कि मैं समझता हूं। स्थैतिक प्रकार से, क्या आपका मतलब है, उदाहरण के लिए, निरंतर? Enum एक स्थिर है! – ChadD

+0

हाँ, मुझे एहसास है कि मैं इसे अक्षम कर सकता हूं और मैं इस पर सवाल उठा रहा हूं और कोड विश्लेषक का उपयोग कर रहा हूं ताकि मैं अपने प्रोग्रामिंग कौशल में सुधार कर सकूं। क्या आपने मेरी स्क्रीन कास्ट देखा? वीएस2005 इंटेलिजेंस में आपके लिए टाइपिंग हुई थी। मैं आपको enum बनाम स्थिर var के बारे में pt नहीं मिलता है। किसी भी विधि के साथ, आपको फ़ंक्शन के रिटर्न प्रकार को देखना होगा, जो टूलटिप में प्रदर्शित होता है। आपके पास रूट क्लास क्लास का फ़ंक्शन हो सकता है जो अभी तक anotehr ऑब्जेक्ट प्रकार देता है, क्या यह भ्रमित होगा और हमें इसके खिलाफ चेतावनी देना चाहिए? मत्स्यावरोध नहीं। एमएस को इंटेलिजेंस काम करने की जरूरत है जैसे कि मेरी पोस्ट स्क्रीन कास्ट किया गया था। यह एक उपयोगी है .. – ChadD

+0

.. एम्बेड करने के लिए फीचर। और उनका समाधान समाधान नेमस्पेस का उपयोग करना है, इसलिए टाइपिंग के बारे में आपका बिंदु बहुत अधिक नहीं है। मुझे आपकी शायद सही संदेह है (सिर्फ इसलिए कि मैं यहां अल्पसंख्यक हूं) लेकिन मुझे नहीं लगता कि आपने एक अच्छा मामला बनाया है या मैं गलतफहमी कर रहा हूं। – ChadD

6

Enumerations आमतौर पर निर्दिष्ट जहां गणन है होने के लिए, वर्ग उन्हें का उपयोग करता है में नहीं रखा जाता है, ताकि लोगों का इस्तेमाल नहीं कर रहे हैं:

Dim speed As New CustomerSpeed(CustomerSpeed.ProfitTypeEnum.FlatAmount) 

गणन रखने कक्षा के बाहर यह आसान उपयोग करने के लिए बनाता है:

Dim speed As New CustomerSpeed(ProfitTypeEnum.FlatAmount) 

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

+0

ठीक है, मुझे आपका जवाब बेहतर पसंद है, लेकिन मुझे लगता है कि मैं आपसे सहमत नहीं हूं और एमएस कि यह एम्बेडिंग कक्षा में है बुरा है क्योंकि यह उन लोगों को भ्रमित करेगा जो कक्षाओं में एम्बेडेड enums रखने के लिए उपयोग नहीं किया जाता है। मुझे लगता है कि समाधान यह स्पष्ट करना है कि enum को इसके खिलाफ सलाह देने के बजाय एम्बेडेड किया गया है (यदि ऐसा है)। यह मुझे देखता है क्योंकि enums के लिए उन इंटेलिजेंस अब स्वचालित नहीं है। उदाहरण के लिए, आपके द्वारा टाइप किए गए कोड की पहली पंक्ति में जहां आप एक नया ग्राहक स्पीड ओबीजे चालू करते हैं, इस पर ध्यान दिए बिना कि enum एम्बेडेड है या नहीं, इंटेलिजेंस एक संकीर्ण पिक सूची – ChadD

+0

.. केवल enum मानों को प्रस्तुत नहीं करता है। यद्यपि इंटेलिजेंस आपको उम्मीदवार के योग्य नामस्थान विरासत को दिखाता है, लेकिन यह ProfitTypeEnum प्रकार के केवल मूल्यों की एक पिक सूची प्रदान करके आपकी सहायता भी कर सकता है। ऐसा लगता है कि इंटेलिसेंस ने वीएस -2010 (इस मामले में, आमतौर पर सुधार किया) के साथ एक कदम पीछे पीछे ले लिया है। – ChadD

+0

अच्छा इंटेलिजेंस (पहले से ही प्रदान की गई सर्वो टूलटिप जानकारी के अतिरिक्त) उपयोगकर्ता के साथ समस्या को हल करेगा जो एनम योग्यता प्राप्त करने की अपेक्षा नहीं करता है। हे ... बस यह 2008 है। मुझे यकीन है कि यह 2008 में काम करता है क्योंकि मैंने इसका वर्णन 2010 में किया था। – ChadD

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