c# 콜백함수 예제

  • 0

c# 콜백함수 예제

대리자는 C 및 C++의 함수 포인터와 유사하게 메서드를 안전하게 캡슐화하는 형식입니다. C 함수 포인터와 달리 대리자는 개체 지향, 형식 안전 및 보안입니다. 대리자의 형식은 대리자의 이름으로 정의됩니다. 다음 예제는 문자열을 인수로 사용하고 void를 반환하는 메서드를 캡슐화할 수 있는 Del이라는 대리자를 선언합니다. 호출자의 코드가 정렬 알고리즘의 일부가 될 수 있습니다. 다음 예제 메서드는 Del 형식을 매개 변수로 사용합니다. 이번에는 생성된 이벤트와 함께 일부 데이터를 보냅니다. 함수에는 서로 다른 데이터 형식의 하나 이상의 매개 변수가 있을 수 있지만 함수 자체를 매개 변수로 전달하려면 어떻게 해야 합니까? C#는 콜백 함수 또는 이벤트 처리기를 어떻게 처리합니까? 대답은 – 대리자입니다. 대리자는 함수에 대한 포인터와 같습니다. 참조 형식 데이터 형식이며 메서드의 참조를 보유합니다.

모든 대리자는 System.Delegate 클래스에서 암시적으로 파생됩니다. 기본적으로 대리자는 메서드와 메서드를 호출해야 하는 대상 개체에 대한 참조를 보유합니다. C#의 대리자는 C++의 함수 포인터와 유사하지만 C# 대리자는 형식안전입니다. 대리자가 메서드를 가리킬 수 있도록 메서드를 매개 변수로 전달할 수 있습니다. 대리자는 콜백 메서드를 정의하고 이벤트 처리를 구현하는 데 사용되며 „대리자” 키워드를 사용하여 선언됩니다. 단독으로 표시하거나 클래스 내에 중첩될 수 있는 대리자를 선언할 수 있습니다. 위의 예에서 PrintHelper 메서드는 Print 형식의 대리자 매개 변수를 가지고 있으며 함수:delegateFunc(numToPrint)처럼 호출합니다. 작업 대리자의 유형에는 여러 가지가 있습니다. 예를 들어 Action 대리자는 단일 매개 변수를 사용 하 고 값을 반환 하지 않는 메서드를 캡슐화 합니다.

그러나 호출이 반환된 후 콜백 함수를 호출할 수 있는 경우 관리되는 호출자는 콜백 기능이 완료될 때까지 대리자가 수집되지 않은 상태로 유지되도록 하는 단계를 수행해야 합니다. 가비지 수집 방지에 대한 자세한 내용은 플랫폼 호출을 사용하여 Interop 마샬링을 참조하십시오. 먼저 DllImport 특성을 사용하여 Win32 함수 EnumWindows 및 GetWindowText를 정의합니다.