क्या सी # में एनम की अपनी फाइल होनी चाहिए? [बन्द है]


178

मेरे पास एक वर्ग है जो एक एन्यूमरेशन का उपयोग करता है, एनम वर्तमान में अपनी फ़ाइल में है जो बेकार लगता है।

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

संपादित करें

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


86
यदि आपने मैजिक नंबर का उपयोग किया है, तो आपको यह समस्या बिल्कुल नहीं होगी।
मुशीनेसिस

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

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

1
अपनी खुद की फाइल में एनम की घोषणा करने से प्रोग्रामर को आसानी से कमांड विंडो (> [एनम नेम]] का उपयोग करके एनम का पता लगाने की अनुमति मिलती है
रिजू

जवाबों:


103

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


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

117
@ फिंगलस - एक व्यक्ति का शोर दूसरे व्यक्ति का संकेत है!
जेफ सनातन

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

2
अगर एनम को विभिन्न वर्गों में साझा किया जाना है, तो इसे एक अलग फ़ाइल में रखना बेहतर होगा।
कोनराड

76

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

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

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


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

59

यह पूरी तरह से स्टाइल का मामला है। मैं जो कुछ भी करता हूं, उसमें एक फाइल होती है जिसे Enums.csउस समाधान में बुलाया जाता है जिसमें एनम घोषणाएं एकत्र की जाती हैं।

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


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

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

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

@ रे ...enums have a relation to classes mostly.। यह वह जगह है जहां तुमने मुझे खो दिया। कृपया उदाहरण दें कि आप कई वर्गों से संबंध रखने वाले शत्रुओं को कैसे संभालेंगे?
के - एसओ में विषाक्तता बढ़ रही है।

@KarlMorrison कृपया, वह टिप्पणी 5 साल पुरानी है। वैसे भी, मैंने एक कारण के लिए "ज्यादातर" शब्द जोड़ा। Enums का संबंध सिर्फ कक्षाओं से अधिक है, जैसे नाम स्थान भी। अगर मेरे पास AnchorStyleएक यूआई लाइब्रेरी में इस्तेमाल किया गया एनम है, तो मैं आमतौर पर यूआई उप नाम और संगत फ़ोल्डर भी रखूंगा। फिर मैं इसे AnchorStyle.csUI फ़ोल्डर में एक फ़ाइल में रखूँगा जहाँ मैं इसे आसानी से ढूँढ सकता हूँ, न कि "Enums.cs" फ़ाइल के नाम से।
रे

47

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

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


यदि आप एक ही उद्यम परियोजना के एक अलग समाधान में enums का पुन: उपयोग करना चाहते हैं तो क्या होगा? इसका उपयोग करके कक्षा के साथ शत्रु को बांधना बहुत मुश्किल होगा।
मोको

@ एमको: परियोजना संदर्भ का मतलब पहले से ही वर्ग और एनम दोनों अलग-अलग समाधान के लिए उपलब्ध होगा। इससे क्या मुश्किल होगा?
ब्रायन वत्स

ज़रूर, लेकिन क्या आप वास्तव में अपने तर्क के साथ पूरी कक्षा को साझा करना चाहते हैं यदि आप केवल एनम का उपयोग करना चाहते हैं। इसके अलावा और क्या होगा अगर एक अलग वर्ग एक ही गणना साझा करता है। आप इसे कहां रखेंगे?
मक्‍का

@ एमको: एक प्रोजेक्ट संदर्भ के साथ, आपको दोनों प्रकार मिलेंगे चाहे वे अलग-अलग फाइलों में हों या नहीं। मुझे पता चल रहा है कि आप क्या पूछ रहे हैं।
ब्रायन वाट

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

24

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


18

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

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

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

11

आम तौर पर मैं कक्षा के रूप में एक ही फाइल में रहना पसंद करता हूं कि यह संभवतः इसका एक गुण होगा। अगर उदाहरण के लिए मेरे पास एक क्लास है Taskतो एनम TaskStatusउसी फाइल में होगी।

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


क्या होगा अगर अलग-अलग वर्ग भी समान एनम का उपयोग करता है?
मोको

2
@ एमको - इसीलिए मैंने कहा (2010 में जब मैंने इसका जवाब दिया तो) कि अगर एनमों में अधिक सामान्य स्वभाव है तो मैं उन्हें अलग-अलग फाइलों में रखता हूँ। संदर्भ से मेरा मतलब था कि कुछ मामलों में कुछ एनम अलग फाइल में हो सकते हैं, और अन्य मामलों में, मैं एक फाइल में एनम घोषणाओं का एक समूह बना सकता हूं।
निकोस स्टेयेकाकिस

10

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

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

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


8

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

enum SearchType { Forward, Reverse }

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

enum Result { Success, Error }

6

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

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


6

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

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


6

यदि आप Visual Studio के लिए USysWare File Browser ऐड-इन का उपयोग कर रहे हैं, तो आप अपने समाधान में विशेष नाम की फ़ाइलों को बहुत जल्दी पा सकते हैं। एक ऐसे एनम की तलाश की कल्पना करें जो अपनी खुद की फ़ाइल में नहीं है, बल्कि एक विशाल समाधान में किसी फ़ाइल में दफन है।

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

और जैसा कि कहा गया था ... एक फाइल कितनी बेकार है जो केवल kb वैसे भी एक जोड़े के रूप में समाप्त होती है?


मैं उस ऐड का भी इस्तेमाल करता हूं, यह काफी काम का है। मैं अपनी खुद की फ़ाइल में शत्रुता रखता हूँ, चाहे समाधान बड़ा हो या छोटा।
रुई जरिम्बा

5

फ़ाइल को अलग करने के लिए बहुत सरल विशाल लाभ। जब कोई भी वस्तु अपने MyObjectName.cs फ़ाइल में होती है ... आप समाधान एक्सप्लोरर में जा सकते हैं और MyObjectName.cs टाइप कर सकते हैं और ठीक 1 फ़ाइल दिखाई जा सकती है। कुछ भी जो डिबगिंग को बेहतर बनाता है वह अच्छा है।

एक समान नोट पर एक और लाभ, यदि आप एक नाम के लिए सभी फ़ाइलों ( ctrl+ shft+ F) को खोजते हैं, तो आपको एक ही फ़ाइल में नाम के 20 संदर्भ मिल सकते हैं ... और यह पाया गया नाम अलग-अलग वस्तुओं का हिस्सा होगा। परिणाम खोजें विंडो में आप देख सकते हैं कि लाइन नंबर और फ़ाइल नाम है। आपको फ़ाइल खोलना होगा और यह पता लगाने के लिए स्क्रॉल करना होगा कि किस संदर्भ में ऑब्जेक्ट मिला था।

कुछ भी जो डिबगिंग को आसान बनाता है, मुझे पसंद है।


3

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

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

}

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


1

मुझे ई सार्वजनिक नाम की एक फ़ाइल मिली है जिसका नाम E है प्रत्येक सेपरेट एनुम है, फिर किसी भी एनुम को E ... के साथ एक्सेस किया जा सकता है और वे एक जगह पर हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.