반응형
1. 사용자 정의 애트리뷰트 만들기
2. 애트리뷰트 클래스를 이용한 애트리뷰트 객체 생성하기
3. 애트리뷰트 정보 얻어내기
4. 내장 애트리뷰트
5. Conditional
6. Obsolete
7. DllImport

- 설명 -
1. 사용자 정의 애트리뷰트 만들기
-public class AppleAttribute : Attribute
 {
     // Empty
 }

2. 애트리뷰트 클래스를 이용한 애트리뷰트 객체 생성하기
- [AppleAttribute("머리만1톤의 클래스입니다.")]
public class AppleStore
{
    [AppleAttribute("사과의 개수를 나타내는 필드입니다.")]
    public int count = 5;
    [AppleAttribute("사과의 개수를 리턴하는 함수입니다.")]
    public int GetCount()
    {
         return this.count;
    }
}

- 클래스나 멤버 필드 그리고 멤버 함수 윗부분에 달아두는 의미
 : [] 로 감싸서 달아두는 것 자체가 객체의 생성을 의미. 클래스에 부연설명을 추가하기 위해서 객체의 메모리를 첨부시켜 둔 것.

- 애트리뷰트를 사용하는 이유 : 컴파일 시 또는 실행시에 그 정보를 이용

3. 애트리뷰트 정보 얻어내기

- 리플랙션 기법 이용

- Type 클래스를 이용해서 Type 객체를 얻은 후 애트리뷰트를 얻어내는 방법

- Type type = Type.GetType("AppleStore");
foreach(Attribute attr in type.GetCustomAttribute(true)
{
    //
}
foreach(FieldInfo finfo in type.GetFields())
{
    foreach(Attribute attr in finfo.GetCustomAttribute(true)
    {
        //
    }
}
foreach(MethodInfo minfo in type.GetMethods())
{
    foreach(Attribute attr in minfo.GetCustomAttributes(true))
    {
        //
    }
}

4. 내장 애트리뷰트

- 내장 애트리뷰트는 네임스페이스명을 기준으로 분류함
 : System.ComponentModel 계열
 : System.ContextStaticAttribute 계열
 : System.Diagnostics 계열
 : System.EnterpriseServices 계열
 : System.Reflection 계열
 : System.Runtime 계열
 : System.Security 계열
 : System.Web 계열
 : System.Xml 계열

5. Conditional

- 특정 전처리 식별자에 의해 실행되는 조건부 함수의 호출을 제어할 수 있는 애트리뷰트

- #define으로 정의된 문자를 사용하였을 경우 해당 함수 실행

- #define으로 정의되어 있지 않으면 해당함수가 호출되지 않는다.

6. Obsolete

- 더 이상 사용하지 않는 프로그램 요소를 표시

- Obsolete 애트리뷰트가 붙어있는 함수가 호출되면 컴파일 시 애트리뷰트에서 설정한 내용이 명령 프롬프트 창에 경고로 출력

7. DllImport

- 기존에 만들어진 외부 DLL을 호출하기 위해서 사용하는 애트리뷰트

- using System.Runtime.InteropServices;

- User32.Dll 의 MessageBox 함수 호출 순서
 : 먼저 사용하려는 함수에서 DllImport 애트리뷰트를 지정
 : DllImport 애트리뷰트에는 호출할 Dll의 이름을 기입
 : 외부의 비관리 코드에 있는 Dll을 특정 프로세스 메모리에 로딩
 : 이 함수의 메모리 주소를 MessageBox() 함수에 지정
 : extern 키워드 -> 어떤 함수가 현재 프로그램 외부에 있음을 나타내는 키워드


반응형

+ Recent posts