2010-08-10 5 views
10

enums를 flags 속성 및 bitwize 연산자 (아래 참조)로 꾸며서 비트 플래그로 사용할 수있는 방법을 살펴 보았습니다..NET 프레임 워크에서 비트 플래그의 실제 사용

이 패턴이 사용 된 .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

보고 싶어 예 - 회원이

FileAccessFileOptions 등 정적, 공개 여부를 말하고, 예를 들어 MethodBase.Attributes 보면 파일 기반의 예는, 너무.

반사경을 열면 을 찾은 다음 "분석"(Ctrl-R)을 누르고 "사용 기준"을 확장하면 사용하는 여러 가지 유형이 표시됩니다. 그래도 시간이 좀 걸립니다 :)

+1

Doh! 나는 반사경에서 그것을 발견 할 수있는 방법이 있어야한다는 것을 알고 있었다. 약간의 코드를 수작업으로 만드는 것이 아니다. –

2

FlagsAttribute이 BCL에서 열거 형으로 사용되는 곳이 많이 있습니다.

리플렉션 코드에 사용 된 BindingFlags 매개 변수의 한 예입니다. 이 사용되는 장소의 톤이있다

2

,이 파일 특성의 .NET 프레임 워크에서 사용되는, 나는 그것이 보안 플래그

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

가장 일반적인 [Flags] 열거 중 하나는 정규식 옵션 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

몇 년 전 나는 닷넷에서 비트 열거 형을 사용하는 방법에 대한 자습서를 썼다는, 어쩌면이 도움이 될 것입니다 http://www.johnsample.com/articles/BitwiseEnums.aspx

2

이 많은 예있다 mscorlib 및 System 어셈블리에서 일상적인 사용에서 얼마나 많은 문제가 발생하는지는 더 까다로운 질문입니다.

예를 들어, System.Threading.ThreadState는 현재 스레드 상태와 보류중인 요청을 조합 한 것입니다.

사실은 단지 웃음을 위해, 시스템 및 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); 
관련 문제