2011-10-26 7 views
7

मुझे हार्डवेयर से कई बिट फ़ील्ड प्राप्त हो रहे हैं।झंडे enum का उपयोग करने के पेशेवरों और विपक्ष क्या हैं?

मेरे कोड मूल रूप से किया गया था:

public readonly byte LowByte; 

public bool Timer { get { return (LowByte & 1) == 1; } } 

तब मैं झंडे enum की याद आई और करने के लिए इसे बदलने पर विचार कर रहा हूँ:

[Flags] 
public enum LowByteReasonValues : byte 
{ 
    Timer = 1, 
    DistanceTravelledExceeded = 2, 
    Polled = 4, 
    GeofenceEvent = 8, 
    PanicSwitchActivated = 16, 
    ExternalInputEvent = 32, 
    JourneyStart = 64, 
    JourneyStop = 128 
} 

public readonly LowByteReasonValues LowByte; 

public bool Timer { get { return (LowByte & LowByteReasonValues.Timer) == LowByteReasonValues.Timer; } } 

और इतने पर।

कौन सा सर्वोत्तम अभ्यास है और क्या होगा यदि प्रत्येक दृष्टिकोण के पेशेवर और विपक्ष हैं?

संपादित करें: मुझे यह जानने में दिलचस्पी है कि दो दृष्टिकोणों के बीच कोई व्यावहारिक अंतर है, खासकर प्रदर्शन के संबंध में। मैं कोडिंग शैलियों पर राय मांगना नहीं चाहता हूं (जब तक कि यह माइक्रोसॉफ्ट दिशानिर्देशों से नहीं आता) क्योंकि यह सवाल अनियंत्रित के रूप में बंद होगा। धन्यवाद।

+0

इस कोड का उपभोग करने वाले डेवलपर के दृष्टिकोण से इसे देखने का प्रयास करें। लेखन इकाई परीक्षण करना ऐसा करने का एक अच्छा तरीका है; लेखन उदाहरण (कोड नमूने) एक और है। किस तरह से डेवलपर स्पष्ट कोड लिखने की अनुमति देता है? क्लाइंट डेवलपर के लिए कौन सा तरीका सबसे सहज होगा? – TrueWill

उत्तर

1

कम से कम करता है, अपने दूसरे उदाहरण बेहतर अर्थ विज्ञान है और कोड के भीतर बिट्स के अर्थ इंगित करता है। बिट के लिए उपयोग किए जाने वाले कोड के भीतर कुछ दस्तावेज हैं।

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

5

बाद में सबसे अच्छा अभ्यास है, क्योंकि यह आपके कोड अधिक पठनीय

4

यदि आप .NET 4.0 का उपयोग कर रहे हैं, तो अब आप HasFlag विधि का उपयोग यह जांचने के लिए कर सकते हैं कि एक enum में एक विशिष्ट बिट है या नहीं। यह जांच की पिछली विधि से भी अधिक पठनीय बनाता है।

[Flags] 
public enum LowByteReasonValues : byte 
{ 
    Timer = 1, 
    DistanceTravelledExceeded = 2, 
    Polled = 4, 
    GeofenceEvent = 8, 
    PanicSwitchActivated = 16, 
    ExternalInputEvent = 32, 
    JourneyStart = 64, 
    JourneyStop = 128 
} 

public readonly LowByteReasonValues LowByte; 

public bool Timer 
{ 
    get 
    { 
    return (LowByte.HasFlag(LowByte.Timer)); 
    } 
} 

MSDN पर अधिक जानकारी।

+0

ओह ... धन्यवाद। मैं .NET 4.0 का उपयोग कर रहा हूं लेकिन यह कार्य पहले मेरे रडार पर नहीं आया था। –

+0

दुर्भाग्यवश यह दिखाई देगा (कम से कम एमएसडीएन पृष्ठ पर उपयोगकर्ता टिप्पणी से) कि यह धीमा है। शर्म की बात है! –

+0

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

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