Rückruf in C#

Bilal Shahid 12 Oktober 2023
  1. Was ist ein callback in C#
  2. Verwenden Sie Delegierte in C#
Rückruf in C#

Heute werden wir uns ansehen, was ein callback in C# ist, und dann etwas Code durchgehen, um zu verstehen, wie er funktioniert.

Was ist ein callback in C#

Ein callback bezieht sich auf einen Code, der als Argument an einen anderen Codeblock übergeben wird, der ihn später ausführt. Zwei seiner Typen umfassen; synchrone (unmittelbare) und asynchrone (verzögerte) Rückrufe.

Synchrone Rückrufe funktionieren sofort, dh sie treten auf, sobald die Funktion aufgerufen wird. Asynchrone (verzögerte) Rückrufe erfolgen oft, sobald die Funktion zurückkehrt.

Wie Sie vielleicht schon erraten haben, funktioniert es für I/O-Operationen, die dazu neigen, diese Funktion aufzurufen, sobald ein bestimmtes Ereignis eintritt.

In C# verwenden wir sogenannte delegates, die Funktionszeiger sind und als callbacks verwendet werden können.

Sie können also eine Methode definieren, die eine Funktion als Parameter akzeptiert, und diese Methode neigt dann dazu, die Funktion mit einer Nachricht oder etwas, das sie an sie zurückgeben möchte, zurückzurufen. Schauen wir uns unten ein Beispiel an.

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

Also haben wir zwei Klassen gemacht; “A und B”. A hat die Funktion Main definiert und instanziiert ein Objekt der Klasse B.

In B haben wir eine Methode erstellt, die die Funktion als Parameter nimmt und diese Funktion dann aufruft. Also wird func mit der Funktion aufgerufen, und B ruft dann die Funktion mit dem Parameter 4 auf, der diese Zahl ausgibt.

Ausgang:

The number is: 4

Der Delegat im obigen Beispiel ist die Funktion: send_back(). Das event ist der Aufruf von send_back() und der callback ist die Funktion, die innerhalb der send_back-Methode aufgerufen wird: callbackMethod().

Wir haben diese Funktion innerhalb der Methode B bereits callback genannt.

Verwenden Sie Delegierte in C#

Ein Delegierter neigt dazu, auf eine Methode zu zeigen, die mit seinen Signaturen übereinstimmt, und kann diese Funktion mit oder ohne die in beiden definierten Parameter aufrufen. So können wir zum Beispiel sagen, dass wir die beiden Funktionen send_back() und callbackMethod() hatten, und wir wollen, dass eine der Delegierte ist.

Die callbackMethod() ist der Delegat. Wir können also einen Code wie folgt schreiben.

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

Der delegate ist send_back, der durch ein handle instanziiert wird, das auf die Methode zeigt und dann die Methode mit den richtigen Parametern aufruft. Sie werden vielleicht feststellen, dass handle(4) gleich callbackMethod(4) ist.

Dies scheint auch den Lambda-Funktionen sehr ähnlich zu sein. Der vollständige Code ist unten dargestellt.

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 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