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 키워드 -> 어떤 함수가 현재 프로그램 외부에 있음을 나타내는 키워드
'[ Program ] > C#' 카테고리의 다른 글
어트리뷰트와 기타 기능 (0) | 2012.09.18 |
---|---|
애트리뷰트(Attribute) (0) | 2012.09.18 |
C# "LC.exe"이(가) -1 코드에서 끝났습니다. (0) | 2012.09.18 |
C# 정리 내용 (ADO.NET) (0) | 2012.09.18 |
비쥬얼스튜디오에서 디자이너를 제대로 표시하지 못할때 (0) | 2012.09.18 |
댓글