순서

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 등 윈도우에서 보는 팝업 창이 다 있었다ㅋㅋ

소소한 즐거움~

+ Recent posts