매개변수가 있는 사용자 지정 특성 만들기
이번에는 매개변수를 하나 갖는 사용자 지정 특성을 사용해 보겠습니다. 다음 내용을 입력한 후 실행해 보세요.
매개변수가 있는 사용자 지정 특성 만들기: NickNameAttributeTest.cs
using System; //① AttributeUsage 특성을 사용하여 특성에 제약 조건 등 설정 [AttributeUsage( AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true)] public class NickNameAttribute : Attribute { public string Name { get; set; } public NickNameAttribute(string name) { Name = name; } } //② AllowMultiple로 여러 번 설정 가능 [NickName("길벗")] [NickName("RedPlus")] class NickNameAttributeTest { static void Main() => ShowMetaData(); static void ShowMetaData() { //모든 커스텀 어트리뷰트 가져오기 Attribute[] attrs = Attribute.GetCustomAttributes(typeof(NickNameAttributeTest)); foreach (var attr in attrs) { //ⓐ is 연산자를 사용하여 커스텀 어트리뷰트의 Name 속성 출력 if (attr is NickNameAttribute) { NickNameAttribute ais = (NickNameAttribute)attr; Console.WriteLine("{0}", ais.Name); } //ⓑ as 연산자를 사용하여 커스텀 어트리뷰트의 Name 속성 출력 NickNameAttribute aas = attr as NickNameAttribute; if (aas != null) { Console.WriteLine("{0}", aas.Name); } } } }
실행 결과
길벗 길벗 RedPlus RedPlus
사용자 지정 특성에 ①처럼 또 다른 특성인 AttributeUsage 특성을 사용하여 클래스 또는 메서드에 적용할 수 있음을 알려 줍니다. AllowMultiple 속성을 사용하여 한 번 이상 적용할 수 있는지 설정할 수 있습니다.
②처럼 NickName 특성의 생성자에 전달된 매개변수는 Name 속성에 저장해서 ⓐ와 ⓑ에서 Name 속성으로 전달된 값을 가져다 사용할 수 있습니다.