C#의 콜백

Bilal Shahid 2023년10월12일
  1. C#에서 콜백이란 무엇입니까?
  2. C#에서 대리자 사용
C#의 콜백

오늘 우리는 C#에서 콜백이 무엇인지 살펴보고 작동 방식을 이해하기 위해 몇 가지 코드를 살펴볼 것입니다.

C#에서 콜백이란 무엇입니까?

콜백은 나중에 실행하는 다른 코드 블록에 인수로 전달된 일부 코드를 나타냅니다. 두 가지 유형은 다음과 같습니다. 동기(즉시) 및 비동기(지연) 콜백.

동기식 콜백은 즉시 작동합니다. 즉, 함수가 호출되자마자 발생합니다. 비동기(지연) 콜백은 함수가 반환된 후에 자주 발생합니다.

짐작할 수 있듯이 특정 이벤트가 발생하면 이 함수를 호출하는 경향이 있는 I/O 작업에 대해 작동합니다.

C#에서는 함수 포인터이며 콜백으로 사용할 수 있는 대리자라는 것을 사용합니다.

따라서 함수를 매개 변수로 사용하는 메서드를 정의할 수 있으며 이 메서드는 다시 전달하려는 메시지나 무언가로 함수를 콜백하는 경향이 있습니다. 아래의 예를 살펴보겠습니다.

using System;

public class A {
  static void Main(String[] args) {
    B func = new B();
    func.send_back(callbackMethod);
  }

  static void callbackMethod(int number) {
    Console.WriteLine("The number is: " + number);
  }
}
public class B {
  public void send_back(Action<int> Callback) {
    Callback(4);
  }
}

그래서 우리는 두 개의 클래스를 만들었습니다. AB. A에는 Main 함수가 정의되어 있으며 B 클래스의 개체를 인스턴스화합니다.

B에서는 함수를 매개변수로 받은 다음 해당 함수를 호출하는 메서드를 만들었습니다. 따라서 func는 함수와 함께 호출되고 B는 이 숫자를 인쇄하는 매개변수 4로 함수를 호출합니다.

출력:

The number is: 4

위의 예에서 delegatesend_back() 함수입니다. eventsend_back() 호출이고 callbacksend_back 메서드인 callbackMethod()에서 호출되는 함수입니다.

우리는 이미 B 메서드 내에서 해당 함수를 callback이라고 명명했습니다.

C#에서 대리자 사용

대리자는 서명과 일치하는 메서드를 가리키는 경향이 있으며 둘 다에 정의된 매개 변수를 사용하거나 사용하지 않고 해당 함수를 호출할 수 있습니다. 예를 들어 send_back()callbackMethod()라는 두 개의 함수가 있고 그 중 하나가 delegate가 되기를 원한다고 말할 수 있습니다.

callbackMethod()대리인입니다. 따라서 다음과 같이 코드를 작성할 수 있습니다.

using System;

public delegate void send_back(int num);

public class B {
 public void send_back(Action<int> Callback) {
   Callback(4);
 }
}

public class Program {
 static void Main(String[] args) {
   B func = new B();
   send_back handle = callbackMethod;
   handle(4);
 }

 static void callbackMethod(int number) {
   Console.WriteLine("The number is: " + number);
 }
}

delegate는 메소드를 가리키는 handle에 의해 인스턴스화된 send_back이며 올바른 매개변수로 메소드를 호출합니다. handle(4)callbackMethod(4)와 같음을 알 수 있습니다.

이것은 또한 Lambda 기능과 매우 유사해 보입니다. 전체 코드는 아래와 같습니다.

using System;

class classer {
  public class A {
    // DELEGATE METHOD
    public delegate void send_back(int num);

    static void Main(String[] args) {
      B func = new B();
      send_back handle = callbackMethod;
      handle(4);
    }

    static void callbackMethod(int number) {
      Console.WriteLine("The number is: " + number);
    }
  }
  // THE CLASS B (THE FIRST CALLBACK METHOD)
  public class B {
    public void send_back(Action<int> Callback) {
      Callback(4);
    }
  }
}
작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub