본문 바로가기

Library/.NET Framework with C#

C# delegate C/C++은 실행 시점에서 동작을 결정하기 위해서 함수 포인터를 사용한다. C++은 실행 시점에서의 동작을 정하기 위해 가상 함수와 같은 매커니즘을 사용하지만, 근본적으로는 함수 포인터를 사용한다. 그렇다면, C#에서는 어떤가? C#은 포인터라는 개념을 직접적으로 지원하지 않기 때문에 함수에 대한 주소를 얻어낸다는 것은 불가능하다. 따라서, 언뜻 생각하기에 Win32 API에서의 콜백 함수 호출은 문제가 있어보인다. 윈도우 메세지는 LRESULT 리턴 형식과 WPARAM, LPARAM이라는 두개의 32비트 파라미터를 가지며, 이 파라미터의 내용은 부호없는 정수 형식인 윈도우 메세지 내용에 따라 달라지기 때문이다. 다형성은, 함수의 시그내처를 보고 결정되기 때문에, 윈도우 메세지를 해석해서 동작을 결정해야.. 더보기
C++ template, C# generics C++은 세상에 존재하는 모든 기능을 포함하려고 했기 때문에 극도로 복잡한 언어가 되었다. 개체 지향 기능과 C와의 호환성, 그리고 템플릿을 통한 일반화 프로그래밍까지의 특징을 포함했기 때문에, 엄청나게 복잡하다. 그래도 가장 괜찮고, 발전성이 있는 기능을 꼽으라고 한다면 단연 템플릿이 될 것이다. C++의 혁명적인 STL은 바로 템플릿의 일반화 기능에서 온 것이며, 이것은 일반화 프로그래밍이 가능한 실제적인 구현물이기도 하다. C++의 템플릿은 처음에는 매크로 기능을 크게 벗어나지 못했지만, 점차 템플릿 특수화(template specialization)와 같은 특징이 포함되면서 온갖 트릭을 가능하게 되었으며, 이것은 boost의 MPL(Meta Programming Library)이라는, 컴파일 시점.. 더보기