Co to jest callback?

Co to jest callback i jak jest zaimplementowany w C#?

 102
Author: cam, 2010-01-26

10 answers

W programowanie komputerowe , wywołanie zwrotne to kod wykonywalny, który jest przekazywany jako argument do innego kodu.

-Wikipedia: Callback (Informatyka)

C # ma delegatów w tym celu. Są one często używane z zdarzeniami , ponieważ zdarzenie może automatycznie wywoływać pewną liczbę dołączonych delegatów (procedury obsługi zdarzeń).

 95
Author: Joey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-21 12:44:04

I just met you,
I to jest szalone,
Ale oto mój numer (delegat),
Więc jeśli coś się stanie (Zdarzenie),
Zadzwoń do mnie, może (callback)?

 868
Author: LightStriker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-26 23:28:09

Wywołanie zwrotne to funkcja, która zostanie wywołana, gdy proces zostanie wykonany, wykonując określone zadanie.

Użycie wywołania zwrotnego jest zwykle w logice asynchronicznej.

Aby utworzyć wywołanie zwrotne w C#, musisz zapisać adres funkcji wewnątrz zmiennej. Można to osiągnąć za pomocą delegate lub nowego lambda semantycznego Func lub Action.

    public delegate void WorkCompletedCallBack(string result);

    public void DoWork(WorkCompletedCallBack callback)
    {
        callback("Hello world");
    }

    public void Test()
    {
        WorkCompletedCallBack callback = TestCallBack; // Notice that I am referencing a method without its parameter
        DoWork(callback);
    }

    public void TestCallBack(string result)
    {
        Console.WriteLine(result);
    }

W dzisiejszym C# można to zrobić używając lambda w stylu:

    public void DoWork(Action<string> callback)
    {
        callback("Hello world");
    }

    public void Test()
    {
        DoWork((result) => Console.WriteLine(result));
    }
 57
Author: Pierre-Alain Vigeant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-16 11:05:38

Definicja

A callback jest kodem wykonywalnym, który jest przekazywany jako argument do innego kodu.

Realizacja

// Parent can Read
public class Parent
{
    public string Read(){ /*reads here*/ };
}

// Child need Info
public class Child
{
    private string information;
    // declare a Delegate
    delegate string GetInfo();
    // use an instance of the declared Delegate
    public GetInfo GetMeInformation;

    public void ObtainInfo()
    {
        // Child will use the Parent capabilities via the Delegate
        information = GetMeInformation();
    }
}

Użycie

Parent Peter = new Parent();
Child Johny = new Child();

// Tell Johny from where to obtain info
Johny.GetMeInformation = Peter.Read;

Johny.ObtainInfo(); // here Johny 'asks' Peter to read

Linki

 42
Author: serhio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-16 11:02:38

Callback jest wskaźnikiem funkcji, który PRZEKAZUJESZ do innej funkcji. Funkcja, którą wywołujesz, spowoduje wywołanie zwrotne (wykonanie) drugiej funkcji po jej zakończeniu.

Zobacz ten link.

 10
Author: TLiebe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-26 14:03:46

Jeśli chodzi o ASP.Net callbacks:

W modelu domyślnym dla ASP.NET www strony, użytkownik wchodzi w interakcję ze stroną i klika przycisk lub wykonuje jakieś inne działania, które skutkują postback. Strona i jej kontrolki są tworzone ponownie, Kod strony działa na serwera, oraz nową wersję strona jest renderowana do przeglądarki. Jednak w niektórych sytuacjach jest przydatne do uruchomienia kodu serwera z Klient bez wykonywania postback. Jeśli skrypt klienta na stronie jest utrzymywanie informacji o stanie (na przykład wartości zmiennych lokalnych), zamieszczenie strony i uzyskanie nowej Kopia niszczy ten stan. Dodatkowo strony postbacks wprowadzają przetwarzanie kosztów, które mogą się zmniejszyć wydajność i zmusić użytkownika do oczekiwania do przetworzenia strony i odtworzony.

Aby uniknąć utraty stanu klienta i nie ponoszą koszty przetwarzania serwer roundtrip, możesz kodować ASP.NET Strona WWW so że może wykonywanie połączeń zwrotnych od klientów. U klienta callback, funkcja klient-skrypt wysyła zapytanie do ASP.NET www strona. Strona uruchamia zmodyfikowany Wersja jego normalnego cyklu życia. Na strona jest inicjowana, a jej kontrolki i innych członków są tworzone, a następnie wywoływana jest specjalnie oznaczona metoda. Metoda wykonuje przetwarzanie że masz zakodowany, a następnie zwraca wartość do przeglądarki, którą można odczytać przez inną funkcję skryptu klienta. W całym tym proces, strona jest na żywo w przeglądarce.

Źródło: http://msdn.microsoft.com/en-us/library/ms178208.aspx

Jeśli chodzi o wywołania zwrotne w kodzie:

Wywołania zwrotne są często delegatami do metod, które są wywoływane po zakończeniu określonej operacji lub wykonaniu pod-akcji. Często można je znaleźć w operacjach asynchronicznych. Jest to zasada programowania, którą można znaleźć w prawie każdym języku kodowania.

Więcej informacji tutaj: http://msdn.microsoft.com/en-us/library/ms173172.aspx

 7
Author: Zyphrax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-26 14:12:13

Prawdopodobnie nie jest to definicja słownikowa, ale wywołanie zwrotne zazwyczaj odnosi się do funkcji, która jest zewnętrzna wobec określonego obiektu, jest przechowywana i wywoływana na określonym zdarzeniu.

Przykładem może być utworzenie przycisku interfejsu użytkownika, który przechowuje odniesienie do funkcji wykonującej akcję. Akcja jest obsługiwana przez inną część kodu, ale po naciśnięciu przycisku wywoływane jest wywołanie zwrotne, które wywołuje akcję do wykonania.

C#, zamiast używać terminu "callback" używa "zdarzeń" i "delegatów", a więcej informacji na temat delegatów można znaleźć tutaj .

 1
Author: acron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-26 14:08:44
Dedication to LightStriker:  
Sample Code:
class CallBackExample
{
    public delegate void MyNumber();
    public static void CallMeBack()
    {
        Console.WriteLine("He/She is calling you.  Pick your phone!:)");
        Console.Read();
    }
    public static void MetYourCrush(MyNumber number)
    {
        int j;
        Console.WriteLine("is she/he interested 0/1?:");
        var i = Console.ReadLine();
        if (int.TryParse(i, out j))
        {
            var interested = (j == 0) ? false : true;
            if (interested)//event
            {
                //call his/her number
                number();
            }
            else
            {
                Console.WriteLine("Nothing happened! :(");
                Console.Read();
            }
        }
    }
    static void Main(string[] args)
    {
        MyNumber number = Program.CallMeBack;
        Console.WriteLine("You have just met your crush and given your number");
        MetYourCrush(number);
        Console.Read();
        Console.Read();
    }       
}

Code Explanation:
I created the code to implement the funny explanation provided by    
LightStriker in the above one of the replies. We are passing 
delegate (number)   to a method (MetYourCrush). If the Interested
(event) occurs in the method (MetYourCrush) then it will call
the delegate (number) which was holding the reference of
CallMeBack method. So, the CallMeBack method will be called. 
Basically, we are passing delegate to call the callback method. 
Please let me know if you have any questions.
 1
Author: Mani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 21:25:17

Wywołanie zwrotne pozwala przekazać kod wykonywalny jako argument do innego kodu. W C i C++ jest to zaimplementowane jako wskaźnik funkcji. W. NET można użyć delegata do zarządzania wskaźnikami funkcji.

Kilka zastosowań obejmuje sygnalizację błędów i kontrolowanie, czy funkcja działa, czy nie.

Wikipedia

 0
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-26 14:06:12

Kroki robocze wywołania zwrotnego:

1) musimy zaimplementować ICallbackEventHandler Interfejs

2) Zarejestruj skrypt Klienta:

 String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
    String callbackScript = "function UseCallBack(arg, context)" + "{ " + cbReference + ";}";
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "UseCallBack", callbackScript, true);

1) from UI call Onclient click call javascript function for EX:- builpopup(p1,p2,p3...)

Var finalfield= p1,p2, p3; UseCallBack(finalfield, ""); Dane od klienta przekazywane po stronie serwera za pomocą UseCallBack

2) public void RaiseCallbackEvent(string eventArgument) w eventArgument otrzymujemy przekazane dane //wykonaj niektóre operacje po stronie serwera i przejdź do" callbackResult "

3) GetCallbackResult() // przy użyciu tej metody dane zostaną przekazane po stronie klienta (ReceiveServerData ())

CallbackResult

4) Pobierz dane po stronie klienta: ReceiveServerData(text), w odpowiedzi serwera tekstowego otrzymamy

 0
Author: Ganesha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-03 13:28:17