2012-12-23 12 views
5

बाहर स्थित कार्यान्वयन enumerated हैं वर्तमान में मैं अपने अंतर्निहित मॉडल के लिए इस कोड है:प्रकार के अंदर या क्लास कार्यान्वयन

Public Enum vehicleType 
    Car 
    Lorry 
    Bicycle 
End Enum 
Public Class TrafficSurveyA 
    ' Declare the fields here. 
    Private fCars As Integer 
    Private fBicycles As Integer 
    Private fLorries As Integer 

    Public Sub New() 
     ' An instance of TrafficSurveyA is created with all vehicle counts set to zero. 
     fCars = 0 
     fBicycles = 0 
     fLorries = 0 
    End Sub 
    Public Sub incrementCount(ByVal vehicle As vehicleType) 
     ' Preconditions: none 
     ' Postconditions: If vehicle is "Car", "Bicycle" or "Lorry" then 1 is added 
     ' to the corresponding count. Otherwise nothing is done. 

     Select Case vehicle 
      Case vehicleType.Car : fCars = fCars + 1 
      Case vehicleType.Bicycle : fBicycles = fBicycles + 1 
      Case vehicleType.Lorry : fLorries = fLorries + 1 
      Case Else 'do nothing 
     End Select 
    End Sub 

    Public Function getCount(ByVal vehicle As vehicleType) As String 
     ' Preconditions: none 
     ' Postconditions: If vehicle is "Car", "Bicycle" or "Lorry", the string 
     ' representation of the corresponding count is returned. 
     ' Otherwise the empty string is returned. 

     Dim result As String 
     result = "" 
     Select Case vehicle 
      Case vehicleType.Car : result = Convert.ToString(fCars) 
      Case vehicleType.Bicycle : result = Convert.ToString(fBicycles) 
      Case vehicleType.Lorry : result = Convert.ToString(fLorries) 
      Case Else : result = "" 
     End Select 
     Return result 
    End Function 

    Public ReadOnly Property Vehicles() As String 
     ' Preconditions: none 
     ' Postconditions: The total number of vehicles recorded is returned. 
     Get 
      Return (fCars + fBicycles + fLorries).ToString() 
     End Get 
    End Property 
End Class 

ऐसा लगता है कि Enum बस के रूप में आसानी से TrafficSurveyA कक्षा इसलिए की तरह भीतर रखा जा सकता है .. ।

Public Class TrafficSurveyA 

    Enum vehicleType 
     Car 
     Lorry 
     Bicycle 
    End Enum 

    ' Declare the fields here. 
    Private fCars As Integer 
    Private fBicycles As Integer 
    Private fLorries As Integer 

    Public Sub New() 
     ' An instance of TrafficSurveyA is created with all vehicle counts set to zero. 
     fCars = 0 
     fBicycles = 0 
     fLorries = 0 
    End Sub 
    ... 
    ... 

फर्क सिर्फ इतना है तो जीयूआई कोड मैं इस vehicleType.Lorry के बजाय इस TrafficSurveyA.vehicleType.Lorry उपयोग करने की आवश्यकता में हो रहा है।

दोनों ठीक चलते प्रतीत होते हैं लेकिन enum प्रकार के इन कार्यान्वयन में से एक गलत है?

उत्तर

4

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

+0

+1 चीयर्स स्टीवन। मुझे एक और सरल 'एनम' प्रश्न मिला है [यहां] (http://stackoverflow.com/questions/14013227/converting-enum-type-to-a-sting-in-order-to-return-the-name) । – whytheq

0

इसके अलावा सबसे संकीर्ण रेंज के दायरे को सीमित के बारे में सोच:

  • निजी केवल एक वर्ग
  • मित्र को विधानसभा के अंदर इस्तेमाल के अंदर इस्तेमाल किया
  • सार्वजनिक किया जा सकता है किसी भी परियोजना का उपयोग या विधानसभा इस से बनाया गया परियोजना

Scope

1

टी में से कोई भी वह विकल्प गलत हैं, लेकिन सार्वजनिक नेस्टेड प्रकार (जैसे वर्ग के अंदर घोषित enum) आम तौर पर निराश होते हैं। वे उन ग्राहकों को भ्रमित कर सकते हैं जिन्हें उन्हें बाहरी वर्ग के नाम से अर्हता प्राप्त करनी है। संबंधित दिशानिर्देश here देखें। कुछ प्रासंगिक हैं:

सार्वजनिक नेस्टेड प्रकारों को तार्किक समूह निर्माण के रूप में उपयोग न करें; इसके लिए नामस्थान का उपयोग करें।

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

अगर घोषित प्रकार के बाहर संदर्भित होने की संभावना है तो नेस्टेड प्रकारों का उपयोग न करें।

+0

आह - तो एक _Class_ प्रभावी रूप से _type_ + _enum_ भी _type_ है। इसलिए जब मैं 'कक्षा' के अंदर 'enum' डालता हूं तो मैं वास्तव में __esting प्रकार _ कर रहा हूँ; मैं भविष्य में इससे बचूंगा। – whytheq

+0

@ व्हाइथेक: ध्यान दें कि यह एक _guideline_ है, नेस्टेड प्रकारों का उपयोग करने के लिए पूरी तरह से अच्छे कारण हो सकते हैं। –

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