C# でのコールバック

Bilal Shahid 2023年10月12日
  1. C#コールバック とは
  2. C#デリゲート を使用する
C# でのコールバック

今日は、C# での callback とは何かを調べてから、それがどのように機能するかを理解するためにいくつかのコードを見ていきます。

C#コールバック とは

callback は、後で実行する別のコード ブロックに引数として渡されるコードを参照します。 そのタイプの 2つが含まれます。 同期 (即時) および非同期 (遅延) コールバック。

同期コールバックはすぐに機能します。つまり、関数が呼び出されるとすぐに発生します。 関数が戻ると、非同期 (遅延) コールバックが発生することがよくあります。

ご想像のとおり、特定のイベントが発生すると、この関数を呼び出す傾向がある 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);
  }
}

したがって、2つのクラスを作成しました。 ABA には Main 関数が定義されており、クラス B のオブジェクトをインスタンス化します。

B では、関数をパラメーターとして受け取り、その関数を呼び出すメソッドを作成しました。 したがって、func は関数で呼び出され、B はパラメータ 4 で関数を呼び出し、この数値を出力します。

出力:

The number is: 4

上記の例の delegate は、関数 send_back() です。 eventsend_back() の呼び出しであり、callbacksend_back メソッド内で呼び出される関数です: callbackMethod()

B メソッド内で既にその関数に callback という名前を付けています。

C#デリゲート を使用する

delegate は、その署名に一致するメソッドを指す傾向があり、両方で定義されたパラメーターの有無にかかわらずその関数を呼び出すことができます。 たとえば、send_back()callbackMethod() という 2つの関数があり、そのうちの 1つを delegate にしたいとします。

callbackMethod()delegate です。 したがって、次のようにコードを書くことができます。

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);
 }
}

delegatesend_back であり、メソッドを指す handle によってインスタンス化され、正しいパラメーターでメソッドを呼び出します。 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