[Flags]
[ Flags 어트리뷰트 ]
해당 어트리뷰트를 이용하면 Enum형을 비트 필드 즉 , 플래그 집합으로 처리 할 수 있다 .
Flags 어트리뷰트를 정의함과 정의안함의 차이는 다음과 같다 .
// Define an Enum without FlagsAttribute.
enum SingleHue : short
{
None = 0,
Black = 1,
Red = 2,
Green = 4,
Blue = 8
};
// Define an Enum with FlagsAttribute.
[Flags]
enum MultiHue : short
{
None = 0,
Black = 1,
Red = 2,
Green = 4,
Blue = 8
};
// The example displays the following output:
// All possible combinations of values without FlagsAttribute:
// 0 - None
// 1 - Black
// 2 - Red
// 3 - 3
// 4 - Green
// 5 - 5
// 6 - 6
// 7 - 7
// 8 - Blue
// 9 - 9
//
//
//
// All possible combinations of values with FlagsAttribute:
// 0 - None
// 1 - Black
// 2 - Red
// 3 - Black, Red
// 4 - Green
// 5 - Black, Green
// 6 - Red, Green
// 7 - Black, Red, Green
// 8 - Blue
// 9 - Black, Blue
(이하 생략)
//
Flags 어트리뷰트의 사용으로 여러 속성을 선택 할 수 있음을 볼 수 있다 .
[ 비트 연산자 ]
[ 예시 ]
연산자 연산자의 기능
& 비트단위로 AND 연산을 한다.
| 비트단위로 OR 연산을 한다.
^ 비트단위로 XOR 연산을 한다.
~ 단항 연산자로서 피연자의 모든 비트를 반전시킨다.
<< 피연산자의 비트 열을 왼쪽으로 이동시킨다.
>> 피연산자의 비트 열을 오른쪽으로 이동시킨다.
[ 예시 ]
[ 예시 ]
주의 . 32비트 int 를 사용시 플래그 범위는 0~31 (0 ~ 2147483647)이다 .
[Flags]
public enum MonsterType
{
None = 0,
Human = 1 << 0,
Flyer = 1 << 1,
Machine = 1 << 2,
Fish = 1 << 3,
All = int.MaxValue
};
MonsterType MyType = MonsterType.Human | MonsterType.Flyer ;
//값이 존재하는지 확인:
if((MyType & MonsterType.Human ) != 0)
//값 특정 값이 있는지 확인 : .net 4.0 이상에 동작
typeAuth3.HasFlag(Auth3Type.Opt1);
//특정 값을 추가:
MyType |= MonsterType.Machine ;
//특정 값을 제거:
MyType &= ~MonsterType.Machine ;
//특정 값을 반전(있다면 빠지고 없다면 추가):
MyType ^= MonsterType.Contract;
//모든 값 삭제:
MyType = MonsterType.None;
//모든 값 설정:
MyType = MonsterType.All;
//특정 값을 제외하고 모두 설정:
MyType = MonsterType.All ^ MonsterType.Human ^ MonsterType.Machine ;
출처
'C#' 카테고리의 다른 글
[ C# ]Conditional Attribute (0) | 2023.06.26 |
---|---|
[ C# ] foreach 문을 돌리며 리스트 안에 객체를 삭제시 주의점 (0) | 2023.04.05 |
[c#] 배열을 딕셔너리로 만들고 인덱스에 따라 정렬하여 사용하기 (0) | 2023.04.04 |
[C#]sealed 한정자 (0) | 2023.03.02 |
[ C# ] ?.. / ?? 연산자 (0) | 2023.02.15 |