2010-03-29 13 views
53

मैं एक वर्ग है कि एक सार्वजनिक enum शामिल के साथ एक कार्यक्रम है, इस प्रकार है:सी # लोक Enums वर्ग में

public class Card 
{ 
    public enum card_suits 
    { 
     Clubs, 
     Hearts, 
     Spades, 
     Diamonds 
    } 
... 

मैं अपने प्रोजेक्ट में कहीं और इस का उपयोग करना चाहते हैं, लेकिन ऐसा नहीं कर सकते कि कार्ड का उपयोग किए बिना .card_suit। किसी को पता है वहाँ सी # में एक तरह से यह घोषणा करने के लिए है यदि ऐसा है तो यह है कि मैं वर्ग कि क्या है के संदर्भ के बिना

card_suits suit; 

घोषित करने के लिए कर रहा हूँ?

+3

जल्द ही, सी # 6 में, कथन का उपयोग करके स्थैतिक इसे बना देगा, इसलिए आपको इस तरह के वर्ग को संदर्भित करने की आवश्यकता नहीं है। लेकिन, आज सी # में नहीं। –

उत्तर

100

वर्तमान में, आपके enum आपके Card कक्षा के अंदर घोंसला है।

// A better name which follows conventions instead of card_suits is 
public enum CardSuit 
{ 
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds 
} 

public class Card 
{ 
} 

निर्दिष्ट करने के लिए::

CardSuit को card_suits से नाम बदलने का सुझाव दिया गया था, क्योंकि माइक्रोसॉफ्ट के दिशा निर्देशों Enumerations के लिए पास्कल प्रकरण का सुझाव आपको बस इतना करना है कक्षा से बाहर enum की परिभाषा के लिए कदम है और एकवचन रूप इस मामले में अधिक वर्णनात्मक है (एक बहुवचन के रूप में सुझाव दिया जाएगा कि आप उन्हें एक साथ ऑरिंग करके एकाधिक गणना मान संग्रहीत कर रहे हैं)।

+0

लेकिन मैं केवल इसे एक ही स्थान पर घोषित करना चाहता हूं, फिर भी इसे नामस्थान –

+4

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

+0

@ pm_2 आपको बिल्कुल ऐसा करने की अनुमति देगा। –

20

आपको कक्षा के बाहर enum परिभाषित करने की आवश्यकता है।

public enum card_suits 
{ 
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds 
} 

public class Card 
{ 
    // ... 

कहा जा रहा है, तो आप भी सुझाव से अधिक मान उपयुक्त हैं,, standard naming guidelines for Enums, जो card_suits के बजाय CardSuit किया जाएगा उपयोग करने पर विचार करने के बाद से पास्कल आवरण का सुझाव दिया है, और enum FlagsAttribute साथ चिह्नित नहीं है चाहते हो सकता है एक चर में।

11

बस कक्षा की सीमाओं के बाहर enum घोषित करें। इस तरह:

public enum card_suits 
{ 
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds 
} 

public class Card 
{ 
    ... 
} 

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

+0

जब तक यह 'सार्वजनिक' है, ओपी को कोई मुद्दा नहीं होना चाहिए, लेकिन जहां तक ​​संगठित और अच्छी तरह से संरचित किया गया है, तो मैं निश्चित रूप से आप से सहमत। – Si8

1

बस इसे क्लास परिभाषा के बाहर घोषित करें।

अपने नाम स्थान का नाम एक्स है, तो आप X.card_suit

द्वारा enum के मूल्यों उपयोग करने में सक्षम तो आप इस enum के लिए एक नाम स्थान में परिभाषित नहीं किया है हो जाएगा, बस card_suit.Clubs आदि

द्वारा उन्हें फोन
0

कक्षा के बाहर enum परिभाषा ले जाएँ लेकिन वर्तमान नामस्थान के भीतर। इसे सार्वजनिक रूप से घोषित करने से यह वहां से विश्व स्तर पर पहुंच योग्य हो जाता है। 'शुरुआती लोगों के लिए सीखना सी #' के लिए www.LearnVisualStudio.Net वीडियो द्वारा प्रदान किया गया एक अच्छा उदाहरण है। मुझे लगता है कि यह शुरुआती श्रृंखला के लिए उसी सी # के तहत www.microsoftvirtualacademy.com पर भी पहुंच योग्य है।

कहा गया है कि कृपया अपने कोड को पठनीय बनाने और अस्पष्टता से बचने के लिए पास्कल या कारमेल केस नामकरण सम्मेलन का उपयोग करें। उदाहरण के लिए कार्डसूट पसंद किया जाता है।

-1

मुझे लगता है कि यह वही है जो आप चाहते हैं।

using card_suits = Card.card_suits; 
संबंधित मुद्दे