사용자 지정 특성 만들기(C#)
사용자 지정 특성 만들기(C#)Creating Custom Attributes (C#) 이 문서의 내용 --> 메타데이터를 통해 특성의 정의를 빠르고 쉽게 식별할 수 있도록 해주는 Attribute로부터 직접적으로 또는 간접적으로 상속한 특성 클래스를 정의하여 사용자 지정 특성을 만들 수 있습니다.You can create your own custom attributes by defining an attribute class, a class that de
docs.microsoft.com
흔히 클래스에 붙은것만 보았지만 실은 메타데이터에 표현되는 모든 대상에 대해서 자유롭게 특성을 추가할 수 있다.
사용자 정의 특성 타입은 직접적이든 간접적이든 모두 public 추상 클래스 System.Attribute를 상속받아야한다.
[event: A] [field: A] 각각 이벤트 필드에 부여되는 식이다.
[DllA(“Kernel32”, CharB = CharB.Auto, SetLastError = true)]
첫 단일 string은 위치 매개변수(Positional Parameter)라 한다. 누락할 수 없는 필수 매개변수들이며, 특성을 지정할 때 반드시 지정해야 한다.
컴파일러는 DllA의 생성자(하나의 클래스로 인식해야 한다.)를 호출한 후 public 값에 대입한다. 이 때 필드나 속성 등에 값을 대입하는 매개변수는 명명된 매개변수(Named Parameter)라 한다.
[] 타입을 제대로 쓰려면 클래스를 제작해야 하는데 DllAAttribute 식으로 뒤에 붙여야한다(표준 권고 사항).
l 반드시 하나의 public 생성자 보유
l 사용자 정의 특성 의미를 위해 위치 매개변수 받아야 함
l 하나 이상의 public 필드나 속성 추가
l 필드보단 프로퍼티를 사용하도록(유연한 대처)
l AttributeTargets.Class | AttributeTargets.Method 식으로 위치 매개변수를 중첩할 수 있다.
후에 해당 클래스(사용자 정의 특성)로 제작된 함수나 클래스의 public 필드와 속성을 문법에 따라 대입하여 초기화 한다. 컴파일러는 해당 객체를 메타데이터 테이블 항목에 serilalization(바이트 스트림) 하여 기록한다.
실행 시점에서 deserialize 하여 객체를 복원하며 사용.
사용자 정의 특성을 사용하여 만든 객체 검출 방법
System.Reflection.CustomAttribute.Extensions
메서드 |
설명 |
IsDefined |
최소 하나 이상이 적용돼 있으면 true 반환(효율적) |
GetCustomAttributes |
테이블 항목에서 deserialize 하여 컬렉션으로 반환한다. |
GetCUstomAttribute |
테이블 항목에서 deserialize 하여 객체 인스턴스를 반환한다. |
Null 값 타입
원래 값에는 null 이 들어갈 수 없다.
Nullable<Int32> x = null; 식의 문법이 존재 해당 비트는 0으로 초기화 되며 메모리는 스택에 위치한다.
해당 식의 줄임 문법은 Int32? X = null; 이 되겠다. 자동으로 인스턴스에 대해 변환과 캐스팅을 지원한다. (실제로는 박싱이 일어나지 않은 채로 null 참조를 반환하도록 CLR이 움직인다.)
'C# > CLR via' 카테고리의 다른 글
가비지 컬렉터 (0) | 2020.03.25 |
---|---|
예외와 상태 관리 (0) | 2020.03.25 |
델리게이트(대리자) (0) | 2020.03.25 |
문자 문자열 텍스트 (0) | 2020.03.25 |
인터페이스 (0) | 2020.03.25 |