2010-08-10 12 views
10

में बिट फ़्लैग के वास्तविक उपयोगों को देखकर यह देख रहा था कि झंडे की विशेषता और बिटविज़ ऑपरेटर (नीचे देखें) के साथ उन्हें सजाने के द्वारा कैसे गड़बड़ों का उपयोग किया जा सकता है।.NET Framework

क्या इस पैटर्न का उपयोग .NET ढांचे में कोई स्थान है? मुझे यह पसंद है, लेकिन कुछ वास्तविक जीवन उदाहरण

[Flags] 
enum Days2 : int 
{ 

    None = 0x0, 
    Sunday = 0x1, 
    Monday = 0x2, 
    Tuesday = 0x4, 
    Wednesday = 0x8, 
    Thursday = 0x10, 
    Friday = 0x20, 
    Saturday = 0x40 
} 

    Days2 meetingDays = Days2.Tuesday | Days2.Thursday; 

    // Set an additional flag using bitwise OR. 
    meetingDays = meetingDays | Days2.Friday; 

    Console.WriteLine("Meeting days are {0}", meetingDays); 

उत्तर

11

देखना चाहता हूँ हाँ -, उदाहरण के लिए MethodBase.Attributes पर देखने कह कि क्या एक सदस्य सार्वजनिक, स्थैतिक आदि

FileAccess और FileOptions है फ़ाइल आधारित उदाहरण हैं, भी।

यदि आप परावर्तक खोलते हैं, तो FlagsAttribute खोजें और फिर "विश्लेषण करें" (Ctrl-R) दबाएं और "द्वारा उपयोग" का विस्तार करें, आप इसका उपयोग करके लोड प्रकार देखेंगे। हालांकि इसमें कुछ समय लगता है :)

+1

दोह! मुझे पता था कि कुछ कोड हैंडक्रैफ्ट करने के बजाए इसे परावर्तक में ढूंढने का एक तरीका होना चाहिए। –

2

ऐसे कई स्थान हैं जहां FlagsAttribute बीसीएल में गणना के लिए उपयोग किया जाता है।

यहां एक उदाहरण है - BindingFlags पैरामीटर प्रतिबिंब कोड में उपयोग किया जाता है।

2

यह प्रयोग किया जाता है स्थानों की टन कर रहे हैं, यह फ़ाइल विशेषताओं में नेट ढांचे में प्रयोग किया जाता है, मैंने देखा है यह सुरक्षा झंडे यानी के रूप में

enum Roles 
{ 
    None = 0, 
    User = 1, 
    Admin = 2, 
    Superman = 4 
} 

if (_user.Roles & Roles.Admin != Roles.None) { user-is-admin } 
if (_user.Roles & Roles.Superman != Roles.None) { user-is-also-superman } 

वे किसी भी परिदृश्य के लिए मूल रूप से महान हो इस्तेमाल किया जहां कुछ के लिए संभावित गुणों का चयन करें, यदि आपके पास ऐसा कुछ है जो उदाहरण के लिए रंगों का चयन हो सकता है या जातीयता या आदि का चयन हो सकता है

उन्हें देखने के लिए एक और आम जगह है Winforms संवाद में उनमें से गुण हैं, ठीक है जैसे आप बटनों के चयन का निर्णय लेने के लिए आप संदेश बॉक्स के लिए या उन्हें एक साथ कर सकते हैं रद्द करें | अनदेखा आदि

5

सबसे आम [ध्वज] enums में से एक आप देखेंगे regex विकल्प enum है। यहाँ एक उदाहरण है:

Regex rxInsensitive = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", 
      RegexOptions.Compiled | RegexOptions.IgnoreCase); 

अधिक यहाँ: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx

साल पहले मैं नेट में थोड़ा enums के प्रयोग पर एक ट्यूटोरियल लिखा था, हो सकता है इस में मदद मिलेगी: http://www.johnsample.com/articles/BitwiseEnums.aspx

2

उदाहरण के बहुत सारे हैं mscorlib और सिस्टम असेंबली में, हालांकि आप रोजमर्रा के उपयोग में कितने सामना करेंगे एक कठिन सवाल है।

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

मैं वास्तव में बाहर झंडा enums के सभी सिस्टम और mscorlib में, बस गिगल्स के लिए फेंक दिया, और फिर दिलचस्प लोगों के लिए खोज चला गया:

Dim types = (From t In Reflection.Assembly.GetAssembly(GetType(Int32)).GetTypes() Select t).Concat(_ 
       (From t In Reflection.Assembly.GetAssembly(GetType(Uri)).GetTypes() Select t)) 

    For Each t As Type In types 
     If t.IsEnum AndAlso (From att In t.GetCustomAttributes(True) Where TypeOf (att) Is FlagsAttribute).Any() Then 
      Console.WriteLine("Flag Enum: {0}", t.ToString()) 
     End If 
    Next 
    Console.ReadLine() 
2

कैसे के बारे में जब इस तरह के रूप font style विकल्प, की स्थापना:

this.Font = new Font(this.Font, FontStyle.Bold | FontStyle.Italic);