55. enum 내부 표현 · [Flags] · HasFlag 박싱 · 캐스팅
난이도 중 해설 보기 →
결함을 모두 찾고 원인·수정안·더 나은 설계를 제시하라. 마커
(A)(B) 는 주목 위치 힌트다.
결함 코드 · C#
// 주제: enum 의 내부 표현 · 기저형 · [Flags] · HasFlag 박싱 · 캐스팅
//
// 과제:
// 1) enum 은 런타임에 사실상 기저 정수형(default int)의 "이름 붙은 상수"일 뿐이다.
// 정의되지 않은 정수값도 캐스팅으로 담길 수 있는 이유를 설명하라.
// 2) [Flags] 의 의미(비트 조합), ToString 표기, HasFlag 의 동작과 박싱 비용을 설명하라.
// 3) 기저형을 byte 로 바꾸면 무엇이 달라지나? Enum.GetUnderlyingType / IsDefined 는?
// 4) 아래 프로그램의 출력을 예측하라.
using System;
[Flags]
public enum Perm { None = 0, Read = 1, Write = 2, Exec = 4 }
public enum Color : byte { Red = 1, Green = 2 }
public static class Program
{
public static void Main()
{
Perm p = Perm.Read | Perm.Write;
Console.WriteLine((int)p); // (1)
Console.WriteLine(p); // (2)
Console.WriteLine(p.HasFlag(Perm.Write)); // (3)
Console.WriteLine(p.HasFlag(Perm.Exec)); // (4)
Color c = (Color)99; // 정의되지 않은 값
Console.WriteLine(c); // (5)
Console.WriteLine(Enum.IsDefined(typeof(Color), c));// (6)
Console.WriteLine(Enum.GetUnderlyingType(typeof(Color))); // (7)
Perm none = 0;
Console.WriteLine(none == Perm.None); // (8)
}
} 내 리뷰 · C#
내 답안 · 자동 저장
작성 후 위 해설 보기에서 모범 해설과 대조하세요.