2011-10-26 3 views
7

하드웨어에서 여러 비트 필드를 받았습니다.플래그 열거 형을 사용하는 장단점은 무엇입니까?

내 코드는 원래이었다

public readonly byte LowByte; 

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

가 그럼 난 플래그 열거 형을 기억하고 그것을 변경 고려하고 : 등등

[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; } } 

합니다.

가장 좋은 방법은 무엇이며, 각 방법의 장단점이 있다면 무엇이 있을까요?

편집 : 특히 성능과 관련하여 두 가지 접근 방식간에 실질적인 차이가 있는지 알고 싶습니다. 필자는 코딩 스타일에 대한 의견을 구하기를 원하지 않습니다 (Microsoft 가이드 라인에서 제외하지 않는 한). 감사. 그것은 적어도

+0

이 코드를 사용하는 개발자의 관점에서 살펴보십시오. 단위 테스트를 작성하는 것이 좋은 방법 중 하나입니다. 예제 (코드 샘플)를 작성하는 것도 또 다른 방법입니다. 어떤 방법으로 개발자는 가장 명확한 코드를 작성할 수 있습니까? 어떤 방법으로 클라이언트 개발자에게 가장 직관적입니까? – TrueWill

답변

1

코드를 더 쉽게 읽을 이후

5

후자는 두 번째 예를 더 의미를 가지고 있으며, 코드 내에서 비트의 의미를 나타냅니다, 가장 좋은 방법입니다. 이 비트가 사용되는 코드의 일부 문서가 있습니다.

그렇지 않으면 기본적으로 마법 (비트) 번호를 뒤적 거리기 때문에 주석을 추가해야합니다. 특히 익숙하지 않은 다른 사람이 코드를 읽기가 훨씬 어려워지기 때문입니다. 비록 당신이 길을 6 개월간이 코드를 유지할지라도, 어떤 비트 5가 사용되었는지 기억하기 어려울 수도 있습니다.

4

.NET 4.0을 사용하는 경우 이제 HasFlag 메서드를 사용하여 열거 형에 특정 비트가 포함되어 있는지 확인할 수 있습니다. 따라서 이전 검사 방법보다 읽기 쉽습니다. MSDN

[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)); 
    } 
} 

더 많은 정보를 제공합니다.

+0

오 ... 고마워. 나는 .NET 4.0을 사용하고 있지만 그 기능은 내 레이더에 나타나지 않았다. –

+0

불행히도 (MSDN 페이지의 사용자 의견에서) 적어도 다소 느립니다. 부끄러움! –

+0

@StephenKennedy : 주목할만한 문제이지만, 문제가 발생하기 시작하면 코드가 매우 중요합니다. 중간에 아무것도 최적화 할 필요가 없습니다. –