블로그 이미지
Magic_kit
study 관련자료를 한곳으로 자기 개발 목적으로 재태크 재무 관리 목적으로 일상생활의 팁을 공유 하기 위하여 블로그를 개설 하였습니다.

calendar

1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28

Category

Recent Post

Recent Comment

Archive

2009. 8. 18. 11:53 .Net Project/.Net C#
반응형

 어튜리뷰트(Attribute)
코드에 대한 설명문(메타데이터)이며, 멤버 앞에 [특성 값] 식으로 붙여서 사용
분야에 따라서 많은 내장 특성이 있다.

사용자 정의 특성을 만들고자 할 때에는 System.Attribute를 상속 받아 설계
특성을 통해서 런타임시에 추가적인 기능을 부여하고 있습니다.

컴파일에게 코드에 대한 여분의 추가 정보를 제공하는 선언형식이며, 추가된 정보는
컴파일 방식에 영향을 주기도 하며 공식적이고 간결한 형태로 코드를 문서화 하여 사용

크게 시스템이 제공하는 공통 어트리뷰트와 사용자가 직접 정의하는 커스텀 어트리뷰트로
구분되며, 주로 컴파일 방식에 영향을 주며 커스팀 어트리뷰트는 단순한 주석이다.

Attribute에서 직접 또는 간접적으로 파생된 클래스인 특성 클래스를 정의하여
고유한 사용자 지정 특성을 만들 수 있습니다.
이러한 파생으로 인해 특성 정의를 메타데이터에서 쉽고 빠르게 식별할 수 있습니다.
클래스 또는 구조체를 작성하는 프로그래머의 이름으로 클래스 및 구조체에 태그를
붙이려는 경우, 다음과 같은 사용자 지정 Author 특성 클래스를 정의합니다.


 Program.Cs


using System;

public class 특성
{
    public static void Main()
    {
        Say1(); //특성 Say1()는 사용되지 않습니다. 경고메시지를 보여주고 있다
        Say2();
    }

    /// <summary>
    /// 닷넷1.0버젼
    /// </summary>
    /// 경고 메시지를 보여주기 위해 사용 True값을 지정시 강제적으로 Error발생 

    ///true지정시 강제에러 발생
    [Obsolete ("현재 메서드는 오래된 버전이므로, Say2()를 사용하세요.")]  
    public static void Say1() {Console.WriteLine("안녕");}

    /// <summary>
    /// 닷넷2.0 버젼 이상

    /// </summary>
    public static void Say2() {Console.WriteLine("방가");}
}


 사용자 지정 만들기.Cs

using System;
/// <summary>
///특성은 메서와 속성에도 정의 가능
///속성 AllowMultiple=true 사용하여 다중으로 사용 가능(추가적인정보 제공)
/// </summary>

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, 
                      AllowMultiple=true)]

public class AuthorAttrubite : Attribute
{
    public string name; ///접근지정자 주의
    public AuthorAttrubite(string name) { this.name = name; }
}

[AuthorAttrubite("MagicKit")]
public class 사용자정의특성
{
    public static void Main()
    {
        Say(); showMetaData();
    }
    private static void showMetaData()
    {
        System.Attribute[] attrs = System.Attribute.GetCustomAttributes
                                          (typeof(사용자정의특성));

        foreach (var attr in attrs)
        {
            AuthorAttrubite aa = (AuthorAttrubite)attr;
            Console.WriteLine("{0}", aa.name); ///이름을 출력하고 할때
        }

            ///다음과 같은 받식으로도 사용가능하다
            ///if (aa != null)
            ///{
            ///  Console.WriteLine("{0}", aa.name);
            ///}
    }
  
    static void Say() { Console.WriteLine("안녕하세요"); }

    /// <summary>
    /// 특성정보 읽어오기
    /// </summary>
 
}

 Micorsoft 사용자 지정만들기 예제 )
http://msdn.microsoft.com/ko-kr/library/sw480ze8.aspx (참고)


사용자 지정 관련 참고)

 http://msdn.microsoft.com/ko-kr/library/sw480ze8.aspx

사용지 지정만들기 예제 만들어보기 (참고)

 http://msdn.microsoft.com/ko-kr/library/sw480ze8.aspx


반응형
posted by Magic_kit