본문 바로가기
[ Program ]/C#

【 C# 】 Attribute

by 관이119 2012. 9. 18.
출처 † 가끔은 구름이 되고 싶다_ † | 성숙꼬맹
원문 http://blog.naver.com/phoogu/110013852953

1. 사용자 정의 애트리뷰트 만들기

2. 애트리뷰트 클래스를 이용한 애트리뷰트 객체 생성하기

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

4. 내장 애트리뷰트

5. Conditional

6. Obsolete

7. DllImport

1. 사용자 정의 애트리뷰트 만들기

- public class AppleAttribute : Attribute

{

//

}

2. 애트리뷰트 클래스를 이용한 애트리뷰트 객체 생성하기

- [AppleAttribute("사과를 위한 클래스입니다.")]

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 키워드 -> 어떤 함수가 현재 프로그램 외부에 있음을 나타내는 키워드

 

댓글