.Net Framework/C#2010. 2. 17. 00:15

델리케이트,이벤트,어트리뷰트

2009.01.20   c# 세미나   작성자 : 손창효         
서문

윈도우 운영체제는 이벤트 드리븐 방식을 지원
닷넷 환경도 이벤트 드리븐 방식의 윈도우 프로그램을 작성할수 있다.
닷넷 윈도우 프로그램을 작성하려면 델리게이트와 이벤트 개념을 반드시 알고 있어야 할것이다.
델리게이트와 이벤트 개념 및 활용 방법에 대해 알아 보겠다.
또한 프로그램에 필요한 정보를 제공하는 어트리뷰트에 대해서도 살펴보자.
델리게이트

정의 : ‘위임’ 또는 ‘대리자’
c/c++에서 사용하는 함수 포인터와 동일한 개념.
c#에서 델리게이트는 메서드의 포인터(메서드 이름)를 저장할 뿐 내부에 코드를 기술하지는 않는다.
닷넷 프레임워크에서는 이벤트와 함께 사용. 이번트 처리에 많이 이용
인터페이스와 유사
delegate 키워드사용

public delegate [메서드 이름];

델리게이트
델리게이트는 호출 할 메서드와 시그너쳐가 정확하게 일치해야 한다.
두 정수를 입력 받아 그 값을 더해 반환하는 Add()메서드가 있다면

이 메서드의 호출을 대리할 델리게이트는 다음과 같은 형태가 되어야한다.

public int Add(int a, int b)

{

return a + b;

}

delegate int AddDelegate(int a, int b);

델리게이트

주의할점 : 델리케이트는 대리할 메서드와 이름은 같지 않아도 되지만 반환형과 매개변수 타입 및 개수 등은 반드시 일치 해야 한다.
델리게이트 ; 델리게이트 사용하기

시그너처가 동일한 다른 메서드를 호출하고 싶다면 new연산자를 이용해 해당 메서드를 지정

델리게이트 ; static 메서드를 호출하는 델리게이트

델리게이트 ; 델리게이트 등록/제거

델리게이트의 등록/ 제거

델리게이트를  등록하려면 +=연산자
델레게이트를 제거하려면 -=연산자
이벤트 처리

정의 : 특정 사건이 발생됐음을 알리는 메시지 .
마우스 클릭, 키보드 누름 등 특정 사건이 발생하면 운영체제나 해당 프로그램은 사건의 종류에 따라 특정 메시지를 발생.
이벤트는 객체와 같이 사용되며, c#에서는 event 키워드를 통해 이벤트처리

public delegate void MyDelegate();

private event MyDelegate ExamEvent;

 


이벤트 처리

event는 델리게이트 객체 선언에 덧붙여 선언. +=, -=연산자를 이용해

이벤트 핸들러를 등록 및 제거

event 핸들러는 다음 형태로 정의

object sender : 보통 호출한 객체를 가리키는 this가 사용됨.
EventArgs args : 이벤트 핸들러 파라미터
 
ExampleClass obj = new ExampleClass();

ExamEvent += new MyDelegate(obj.Method);

public delegate void EventHandler(object sender, EventArgs args)

이벤트 처리과정

델리게이트 객체 선언

이벤트 핸들러 구현(처리할 함수 구현)

이벤트에 델리게이트 객체(이벤트 핸들러)등록

이벤트 선언
 
public delegate void Defeat();

private event Defeat EnemyDetected

Defeat라는 델리게이트와 EnemyDetected라는 이벤트 정의.

EnemyDetected라는 이벤트가 발생하면 Defeat 델리게이트를 호출

이벤트 발생을 위한 지침

‘On + 이벤트 명’
OnEvent 메소드는
1.이벤트를 조사하고 어떤 등록 객체가 있는지 검사하고 아무도 없다면 종료
2.등록된 델리게이트에게 전달할 필요가 있는 인자들을 정리하고 적절한 EventArgs 객체에 집어 넣는다.
3.이벤트를 발생하고 자신의 인스턴스를 첫 번째 인자로 그리고 EventArgs 를 두 번째 인자로 전달한다.
이벤트 처리 ; 이벤트 사용하기

어트리뷰트

정의 : 프로그램에 필요한 정보를 제공하는 기능으로, 컴파일타임과 런타임 모두 영향을 미침 어트리뷰트 구문은 대괄호 ([])로 묶어 표현
컴파일러와 구조체 , 클래스 등에 영향을 미치는 범용적인 기능을 제공

대괄호 안에는 지정위치,이름 파라미터 및 명명 파라미터가 들어감

[어트리뷰트명(“positional_parameter”, “named_parameter=value,…)]

[DllImport(Use32.dll”)]

[Obsolete(“메시지를 출력합니다.”)]

[Conditional(“Youngjin.com”)]

 

어트리뷰트

어트리뷰트는 닷넷이 제공하는 내장 방식과 사용자가 작성한 사용자 정의 방식으로 나뉜다.
닷넷이 제공하는 내장 어트리뷰트는 약 200개 정도 , 모두 Attribute 클래스를 상속받은 sealed 형태의 클래스.

책에서는 DllImport와 Obsolete 어트리뷰트 살펴봄
DllImport 어트리뷰트 ; 사용하기

“User32.dll파일”에 정의된 messagebox

c#에서 내부 메서드 호출하듯이 Win32 API를 사용할수 있다.
DllImport 어트리뷰트 ; 사용하기

Win32 API인 MessageBox 함수 사용법은 다음과 같다.

int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);

Obsolete 어트리뷰트 ; 사용하기

정의 : “폐물이 된, 쓸모없는” . 특정 메서드나 속성을 쓰지 말도록 유도
프로그램의 업그레이드 버전을 작성할 때 기존에 있던 특정 기능을 사용하지못하게 경고하는 용도로 사용된다
summary

델리게이트는 c/c++의 함수 포인터 개념이며
이벤트는 특정 사건을 처리하는 방법
델레게이트 호출 방법과 이벤트 처리하는 방법을 정확히 이해하고 있어야 하겠다.

'.Net Framework > C#' 카테고리의 다른 글

Repeater  (0) 2010.02.17
ViewState  (0) 2010.02.17
ID와 ClientID의 차이  (0) 2010.02.17
PostBack URL 그리고 Redirect Method  (0) 2010.02.17
C#은?  (0) 2010.01.28
Posted by Tiwaz