독자적인 이벤트를 정의하고 사용하는 방법이다. 여기서는 Connection 개체(이벤트를 발생시킨다)와 Display 개체(이벤트를 처리한다)를 구현해본다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 using System; using System.Timers; namespace ConsoleApp3 { public delegate void MessageHandler(string messageText); // 대리자 정의 internal class Connection { public event MessageHandler MessageArrived; // 이벤트가 사용할 대..
이벤트는 개체에 의해 발생되며, 그를 처리하기 위한 코드를 제공해야 한다는 점에서 예외와 비슷하다. 그러나 몇가지 중요한 차이들이 존재한다. 가장 중요한 차이는 이벤트에는 try...catch 에 해당하는 구조가 없다는 점이다. 이벤트의 경우에는 반드시 이벤트를 등록해야 한다. 이벤트를 등록한다는 것은 이벤트가 발생했을 때 실행될 코드를 이벤트 처리기(event handler)라는 형태로 작성한다는 의미이다. 하나의 이벤트에는 여러개의 처리기들이 등록될 수 있으며, 그 이벤트가 발생하면 등록된 모든 이벤트 처리기들이 호출된다. 이벤트 처리기는 그 이벤트를 발생시킨 개체의 클래스의 일부일 수 도 있으나, 다른 클래스들 안에 존재하는 경우가 많다. 이벤트 처리기 자체는 그냥 함수이다. 이벤트 처리기 함수의 ..
대리자, 이벤트 처리기 함수에 대한 참조를 저장하는 형식 함수의 선언과 비슷하지만 아래와 다른 점이다. -함수 본문은 없다 - delegate 키워드 사용 (아래코드 3행) delegate int processDelegate(double parma1, double param2); 키워드 : delegate 대리자 형식 이름 : processDelegate 반환 자료형 : int 인수자료형 : double, double 대리자 선언은 (아래코드 3행) 반환 형식과 매개변수 목록을 가진 하나의 함수(processDelegate) 서명을 지정한다. (가상함수나 함수 포인터와 비슷한가...) 서명 : 함수의 반환 자료형과 함수 매개변수(인수)의 자료형이 같은것 = 서명일치 대리자 선언해둔 후에는 그 대리자 형식..
C#에서 win32sdk 사용하기 위해서는 아래 코드와 같다. HWND 는 C#에서 IntPtr 로 사용하고, HWND 전달할때는 Handle 을 사용하고 char* 는 string 를 쓰면된다. 사용자정의 메시지인 WM_USER 를 전달하기 위해 PostMessage 를 이용하고 WndProc 를 재정의한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051// System, System.Drawing, System.Windows.Forms 참조추가하기 class Class1 : System.Windows.Forms.Form{ static System.Windows.Forms.Form ..