2010-02-17 14 views
142

मेरे पास एक कक्षा है जो एक गणना का उपयोग करती है, enum वर्तमान में अपनी फ़ाइल में है जो अपमानजनक लगता है।सी # में enums अपनी खुद की फाइल है?

उन फाइलों के नामस्थान में रखे गए मानकों पर सामान्य राय क्या है जो वे खाए जाते हैं? या enum वास्तव में अपने स्वयं के सीएस फ़ाइल में रहना चाहिए?

संपादित

मुझे लगता है कि, विचाराधीन वर्ग इन enumerations का उपयोग करता है, तो बाहरी कॉल करता है उल्लेख करना चाहिए। दूसरे शब्दों में, एक और वर्ग इन गणनाओं को सेट कर सकता है। इसलिए वे कक्षा में आंतरिक रूप से उपयोग नहीं किए जाते हैं, अन्यथा यह प्रश्न कोई ब्रेनर नहीं होगा।

+70

यदि आप जादू संख्याओं का उपयोग करते हैं, तो आपको यह समस्या बिल्कुल आसान नहीं होगी। – MusiGenesis

+7

क्या यह समुदाय विकी होना चाहिए? आईडीई क्षमताओं के अलावा कोई सही जवाब नहीं है और कोई वास्तविक तकनीकी विचार नहीं है। –

+1

वे अभी भी एक ही नामस्थान में हो सकते हैं भले ही वे अलग-अलग फाइलों में हों। यदि आप द्वितीयक प्रश्न पूछ रहे हैं कि कोई नाम नामस्थान और एक नई फ़ाइल बनाना है, तो मैं कहूंगा, आमतौर पर, नहीं। लेकिन अन्यथा, आपको नामस्थानों की गलत समझ हो सकती है और उन्हें उनके बारे में पढ़ना चाहिए - (उनके लिए बहुत कुछ नहीं, केवल एक संगठन तंत्र) –

उत्तर

77

मैं "अपमानजनक" (अतिरिक्त फ़ाइल लागत कितनी है?) नहीं कहूंगा, लेकिन यह अक्सर असुविधाजनक होता है। आम तौर पर एक वर्ग है जो enum के साथ सबसे करीबी associtated है, और मैं उन्हें एक ही फाइल में डाल दिया।

+6

ब्राउज़िंग करते समय यह निर्देशिका में शोर जोड़ता है, यही मेरा मतलब है अपमानजनक। – Finglas

+88

@ फ़िंगलास - एक व्यक्ति का शोर एक और व्यक्ति का सिग्नल है! –

+2

आमतौर पर एक वर्ग है जो सबसे करीबी से जुड़ा हुआ है। लेकिन अगर यह बदलता है, अगर कोई समय के साथ आता है तो enum पर निर्भरता लेने का फैसला करता है, तो यह एक रिफैक्टर के लिए समय है। –

53

यह पूरी तरह से शैली का विषय है। मैं जो करना चाहता हूं वह उस समाधान में Enums.cs नामक फ़ाइल है जिसमें enum घोषणाएं एकत्र की जाती हैं।

लेकिन वे आम तौर पर F12 कुंजी के माध्यम से पाए जाते हैं।

+4

मुझे लगता है कि यह शायद यह के रूप में सबसे अच्छा विकल्प है: 1) जो निर्देशिका 2) को अव्यवस्थित रूप में माना जा सकता है कई के बजाय केवल एक फ़ाइल है क्या फ़ाइल के भीतर 3) का अर्थ है निहित है स्पष्ट है कि आप जानते हैं कि एक वर्ग में एक फ़ाइल में होने के बजाय 'enum' कहां मिलना है, जो संबंधित है, लेकिन –

+3

का उपयोग करके केवल एकमात्र वर्ग नहीं है, मुझे बिल्कुल यह पसंद नहीं है। जैसा कि जेम्स कुरान के जवाब में कहा गया है, enums ज्यादातर वर्गों के साथ संबंध है। उन्हें सभी को एक वैश्विक फ़ाइल में डालने पर, वे एक निर्देशिका में भी नहीं हैं (उप-नामस्थान के लिए) जहां वे विषयगत रूप से संबंधित हो सकते हैं। –

+2

हां @ डेबगियर, मैं आपसे सहमत हूं। चूंकि यह उत्तर 2010 में वापस पोस्ट किया गया था, इसलिए मैंने विभिन्न दृष्टिकोणों के बीच बदल दिया है और प्रति फ़ाइल एक फ़ाइल के साथ जाना है, या संबंधित वर्ग के समान फ़ाइल में enums घोषित करना है। –

59

यह वास्तव में वरीयता का मामला है।

मैं प्रत्येक गणना को अपनी फ़ाइल में रखना पसंद करता हूं (इसी प्रकार प्रत्येक इंटरफ़ेस, वर्ग और संरचना के लिए, चाहे कितना छोटा हो)। जब मैं किसी अन्य समाधान से आ रहा हूं तो यह उन्हें ढूंढना आसान बनाता है या अन्यथा पहले से ही इस प्रकार के प्रश्न का संदर्भ नहीं है।

प्रत्येक फ़ाइल में एक ही प्रकार डालने से भी बिना किसी भिन्नता के स्रोत नियंत्रण प्रणाली में परिवर्तनों की पहचान करना आसान हो जाता है।

+8

"प्रत्येक फ़ाइल में एक ही प्रकार डालने से भी बिना किसी भिन्नता के स्रोत नियंत्रण प्रणाली में परिवर्तनों की पहचान करना आसान हो जाता है।" Diffing का डर आपके डिजाइन निर्णयों की नींव नहीं बनना चाहिए। मैं यह भी तर्क दूंगा कि जो कोई भी नहीं जानता कि स्रोत नियंत्रण में फ़ाइल को सही ढंग से कैसे विभाजित किया जाए, वह वास्तव में स्रोत नियंत्रण का उपयोग नहीं कर रहा है। – Dan

1

मैं एक सार्वजनिक enums फ़ाइल का नाम ई प्रत्येक अलग enum युक्त है, तो किसी भी enum ई के साथ पहुँचा जा सकता है करना चाहते हैं ... और वे एक ही स्थान पर प्रबंधित करने के लिए कर रहे हैं।

9

आम तौर पर मैं क्लास है कि यह सबसे शायद की एक विशेषता हो जाएगा के रूप में एक ही फाइल में होना मेरे enums पसंद करते हैं। उदाहरण के लिए मेरे पास कक्षा Task है तो enum TaskStatus एक ही फ़ाइल में होगा।

हालांकि, अगर मैं एक अधिक सामान्य प्रकृति के enums है, तो मैं उन्हें प्रासंगिक रूप से विभिन्न फाइलों में रहते हैं।

7

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

enum SearchType { Forward, Reverse } 

तो enum सामान्य है और हो सकता है विभिन्न परिदृश्यों के लिए कई कक्षाओं द्वारा उपयोग किया जाता है, तो मैं इसे अपनी फ़ाइल में इस्तेमाल करने के इच्छुक हूं। उदाहरण के लिए नीचे दिए गए कई उद्देश्यों के लिए इस्तेमाल किया जा सकता है:

enum Result { Success, Error } 
5

मैं एक बहुत ही सरल कारण के लिए अपने स्वयं के फ़ाइल में enums डाल करने के लिए करते हैं: वर्गों और structs के साथ के रूप में, यह जानना अच्छा है बिल्कुल जहां अगर देखने के लिए एक ही नाम के फाइल में: यदि आप एक प्रकार की परिभाषा लगाना चाहते हैं। (निष्पक्ष बनाने के लिए वी.एस. में आप हमेशा का उपयोग भी ", परिभाषा पर जाएँ," कर सकते हैं।)

जाहिर है, यह हाथ से बाहर निकल सकते।एक सहकर्मी जहां मैं काम करता हूं, प्रतिनिधियों के लिए अलग-अलग फाइलें भी बनाता है।

17

मैं ज्यादातर नामस्थान और कक्षा के बाहर जगह में रखता हूं ताकि यह उस नामस्थान में अन्य वर्गों को आसानी से सुलभ कर सके।

namespace UserManagement 
{ 
    public enum UserStatus { Active, InActive } 
    class User 
    { 
     ... 
    } 
} 
+0

वाह। मुझे ज्ञात नहीं है कि नामों को सीधे नामस्थान में रखा जा सकता है। मैं इस जवाब के साथ जा रहा हूँ। मेरे एमवीसी संरचना के अंदर उन्हें नियंत्रक के अंदर रखा जाएगा जो मुझे तर्क देता है। इसके लिए धन्यवाद। Upvoted। – C4u

35

पूछने के लिए अपने आप को होगा सवाल: वहाँ सी # में एक गणना प्रकार इंगित करता है कि मैं इसे अन्य सभी प्रकार मैं बनाने से अलग ढंग से व्यवहार करना चाहिए के बारे में कुछ भी है?

यदि गणना सार्वजनिक है, तो इसे किसी अन्य सार्वजनिक प्रकार की तरह माना जाना चाहिए। यदि यह निजी है, तो इसे कक्षा के घोंसले सदस्य के रूप में घोषित करें। दो सार्वजनिक प्रकारों को एक ही फाइल में रखने के लिए कोई अनिवार्य कारण नहीं है क्योंकि केवल एक गणना है। तथ्य यह है कि यह एक सार्वजनिक प्रकार है जो मायने रखता है; प्रकार का स्वाद नहीं है।

5

enums के लिए एक अलग फ़ाइल का उपयोग करने का एक लाभ यह है कि आप मूल वर्ग को हटा सकते हैं जो enum का उपयोग करते हैं और enum का उपयोग करके एक नई कक्षा लिखते हैं।

यदि enum मूल वर्ग से स्वतंत्र है तो इसे एक अलग फ़ाइल में डालने से भविष्य में परिवर्तन आसान हो जाता है।

19

अपनी फ़ाइल में प्रत्येक प्रकार (वर्ग, संरचना, enum) डालने का एक अन्य लाभ स्रोत नियंत्रण है। आप आसानी से प्रकार का पूरा इतिहास प्राप्त कर सकते हैं।

7

यह इस बात पर निर्भर करता है कि किस एक्सेस की आवश्यकता है।

यदि enum केवल एक वर्ग द्वारा उपयोग किया जाता है, तो इसे उस कक्षा में घोषित करना ठीक है क्योंकि आपको इसे कहीं और उपयोग करने की आवश्यकता नहीं है।

एकाधिक कक्षाओं या सार्वजनिक एपीआई द्वारा उपयोग की जाने वाली enums के लिए, तो मैं हमेशा उचित नामस्थान में अपनी फ़ाइल में परिभाषा रखूंगा। इस तरह से ढूंढना कहीं अधिक आसान है, और रणनीति एक-ऑब्जेक्ट-प्रति-फ़ाइल के पैटर्न का पालन करती है, जो कक्षाओं और इंटरफेस के साथ भी उपयोग करने के लिए अच्छा है।

5

यदि आप विजुअल स्टूडियो के लिए यूएसिसवेयर फ़ाइल ब्राउज़र ऐड-इन का उपयोग कर रहे हैं, तो आप अपने समाधान में विशेष नामों की फ़ाइलों को बहुत तेज़ी से ढूंढ सकते हैं। कल्पना कीजिए कि एक ऐसी चीज की तलाश है जो अपनी फाइल में नहीं है बल्कि इसके बजाय एक विशाल समाधान में कुछ फाइलों में दफनाया गया है।

छोटे समाधानों के लिए, इससे कोई फर्क नहीं पड़ता, लेकिन बड़े लोगों के लिए, कक्षाओं और enums को अपनी फाइलों में रखने के लिए यह और अधिक महत्वपूर्ण हो जाता है। आप उन्हें तुरंत ढूंढ सकते हैं, उन्हें संपादित कर सकते हैं, आदि। मैं अत्यधिक, अत्यधिक अपनी खुद की फाइल में अपनी enum डालने की सलाह देते हैं।

और जैसा कि कहा गया था ... कितनी अपर्याप्त फ़ाइल है जो केवल कुछ केबी होने के बाद समाप्त होती है?

+0

मैं उस ऐड-इन का भी उपयोग करता हूं, यह काफी आसान है। मैं अपनी फाइल में enums डालता हूं, भले ही समाधान बड़ा या छोटा हो। –

0

यदि आपके पास एक समाधान में कई परियोजनाएं हैं। फिर बेहतर एक और परियोजना Utilities बनाएँ। फिर एक फ़ोल्डर \Enumerations बनाएं और एक नेस्टेड static class बनाएं। और फिर प्रत्येक स्थैतिक वर्ग को असाइन करें जहां आप अपनी परियोजनाओं के नाम से मेल खाते हैं। उदाहरण के लिए आप DatabaseReader और DatabaseUsers नामक एक परियोजना तो आप

public static class EnumUtility { 
    #region --Database Readers Enum 
    public static class EnumDBReader { 
     public enum Actions { Create, Retrieve, Update, Delete}; 
    } 
    #endregion 

    #region --Database Users Enum 
    public static class EnumDBUsers { 
     public enum UserIdentity { user, admin }; 
    } 
    #endregion 

} 

फिर पूरे enum कि परियोजनाओं प्रति पूरे समाधान में इस्तेमाल किया जा सकता है उस पर घोषित किया जाएगा की तरह स्थिर वर्ग के नाम हो सकता है। प्रत्येक चिंता को अलग करने के लिए # region का उपयोग करें। इसके द्वारा, किसी भी enums

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