순서
I. Attribute
II. Attribute Example
I. Attribute
Attribute는 기본적으로 디버깅을 위한 문법으로
코드에 부가적인 정보(메타데이터)를 기록하고 읽을 수 있다.
원하는 프로그래밍 요소 위에 C#에서 제공하는 Attribute를 사용하면 된다.
[Attribute 종류]
Conditional : 메소드 위에만 붙일 수 있고, 해당 기호가 정의되어 있어야 한다.
-> 개인적으로 C++ 의 #ifdefine 느낌이였다.
-> System.Diagnostics 정의 되어있다.
Obsolete : 더이상 사용되지 않는 클래스, 함수, 필드 위에 붙인다. (경고, 메시지, 컴파일에러 가능)
DLLImport : Unmanaged Code( .NET 환경 밖에서 개발된 코드 )를 사용 할 수 있다.
-> System.Runtime.InteropService 정의 되어있다.
II. Attribute Example
1. Conditional Example
메소드 위에만 붙일 수 있는 조건이다.
(System.Diagnostics)에 정의되어있다.
// Conditional 사용할거면 정의해줘야함.
#define needDefine
using System;
using System.Diagnostics; // 여기에 정의됨.
public class CMain {
static void Main() {
myPrint();
}
// Conditional 옵션 추가
[Conditional ("needDefine")]
public static void myPrint() {
Console.WriteLine("hello");
}
Conditional 옵션은 함수 사용의 조건을 판단하기 때문에 오류가 되지는 않는다.
2.Obsolete Example
더 이상 사용하지 않는 클래스, 함수, 필드 앞에 붙인다.
여러 옵션들이 있다.
using System;
class ObsTest {
//1.
[Obsolete]
public void M1() { }
//2.
[Obsolete("print Message")]
public void M2() { }
//3.
[Obsolete("print Message", true)]
public void M3() { }
}
1. 사용되지 않는다는 경고메시지
2. 1의 경고메시지 + 내 추가메시지
3. 1의 경고메시지 + 내 추가메시지 + true옵션으로 인한 컴파일 에러
위와 같이 디버깅용 창에 warning이 발생한다.
3. DLLImport Example
닷넷 환경 밖에서 개발된 코드를 사용할 수 있는 동적 라이브러리(Dll) Import이다.
기본적으로 User32.DLL에서 제공하는 MessageBox를 사용해보자.
using System.Diagnostics;
namespace DLLApp {
public class CMain() {
static void Main() {
MessageBox(0, "halo~", "in C#", 0);
}
// 외부 라이브러리로 extern 정의해준다.
[DllImport("User32.Dll")]
public static extern int MessageBox(int h, string m, string c, int type);
}
}
in C# (3번째 인자) 이름의 창에 string (2번째 인자)의MessageBox가 팝업으로 나타난다.
(cmd 안에 나타나는거 아님, 캡쳐라 그렇게 보이는 것)
신기해서 타입(4번째 인자 int 매개변수)도 이것저것 바꿔봤는데
좌측부터 1 2 3 이다.
MessageBox(0, "halo~", "in C#", 1);
MessageBox(0, "halo~", "in C#", 2);
MessageBox(0, "halo~", "in C#", 3);
4 5 등 윈도우에서 보는 팝업 창이 다 있었다ㅋㅋ
소소한 즐거움~
'Programming > C#' 카테고리의 다른 글
[Programming][C#] 문법 13. Event (0) | 2023.01.26 |
---|---|
[Programming][C#] 문법 12. Delegate (C++ 함수 포인터와 비슷함) (0) | 2023.01.13 |
[Programming][C#] 문법 10. Indexer (0) | 2023.01.13 |
[Programming][C#] 문법 9. Parameter(ref, out), Operator Overloading (0) | 2023.01.13 |