Ho iniziato la codifica in C# e non ho mai avuto l'opportunità di utilizzare i callback anche se ho usato delegati per il cablaggio degli eventi. Qual è la vera applicazione dei callback. Ti sarei grato se potessi fornire un link che spiega i callback in modo diretto senza prerequisiti C++.Richiamate in C#
risposta
Un callback è in realtà un delegato, ovvero un riferimento a una funzione. Le callback vengono spesso utilizzate in scenari asincroni (multi-thread) per notificare il chiamante al termine dell'operazione asincrona: il metodo asincrono riceve un callback/delegate come parametro e chiama questo delegato dopo aver terminato il proprio lavoro, ovvero chiamate " indietro ". L'uso di callback/delegati consente al chiamante di decidere quale operazione viene chiamata perché passa nei parametri.
Esempio:
Quando l'utente avvia un'operazione di esecuzione lungo cliccando su un pulsante, è possibile impostare il puntatore del mouse a un WaitCursor e avviare l'operazione di lungo in esecuzione su un altro thread. Ora, come fai a sapere quando puoi reimpostare il puntatore del mouse sul normale ArrowCursor? Risposta: utilizzo di callback. È sufficiente creare un metodo che reimposta il cursore su una freccia e quindi passa un riferimento a questo metodo (un delegato) come parametro di callback. Quindi questo metodo viene chiamato al termine dell'operazione e il tuo cursore viene ripristinato.
In realtà, gli eventi sono anche una sorta di callback: si registra un delegato per ricevere una notifica quando si verifica un determinato evento. Quando si verifica questo evento, si è richiamato utilizzando il delegato fornito.
Qualsiasi azione asincrona si baserà su un callback.
Un callback è un delegato è un puntatore a funzione. Non penso che i thread siano un prerequisito per i callback.
Vengono utilizzati per acquisire i risultati di un'azione asincrona.
Se si ha familiarità con WPF, un buon esempio sono le proprietà di dipendenza. Si registra quindi utilizzando DependencyProperty.Register:
public static DependencyProperty Register(
string name,
Type propertyType,
Type ownerType,
PropertyMetadata typeMetadata,
ValidateValueCallback validateValueCallback
)
come ultimo parametro, si passa una funzione tuo che si chiama dal framework quando un certo lavoro deve essere fatto (convalidando il valore).
Delegato contiene un riferimento a un metodo che lo rende candidato ideale per la richiamata.
Ho cercato di spiegarlo con un semplice esempio: La classe Meditor si comporta come un server di chat in cui i controllori possono accedere. Per poter comunicare, i controllori devono implementare un metodo che funga da metodo di callback.
public class Mediator
{
//instruct the robot to move.
public delegate void Callback(string sender, string receiver, Message msg);
Callback sendMessage;
//Assign the callback method to the delegate
public void SignOn(Callback moveMethod)
{
sendMessage += moveMethod;
}
public void SendMessage(string sender, string receiver, string msg)
{
sendMessage(sender, receiver, msg);
}
}
public class Controller : Asset
{
string readonly _name;
Mediator _mediator;
public Controller(Mediator m, string name)
{
_name = name;
_mediator = m;
//assign the call back method
_mediator.SignOn(Notification);
}
public void Notification(string sender, string receiver, string msg)
{
if (receiver == _name)
{
Console.WriteLine("{0}: Message for {1} - {2}".FormateText(sender,
receiver, msg)); //I have create extension method for FormatText.
}
}
public void Mobilize(string receiver, string msg)
{
_mediator.SendMessage(_name, receiver, msg);
}
}
static void Main(string[] args)
{
Mediator mediator;
mediator = new Mediator();
//accept name here...
Controller controller1 = new Controller(mediator, "name1");
Controller controller2 = new Controller(mediator, "name2");
controller1.Mobilize("name2","Hello");
controller1.Mobilize("name1", "How are you?");
}
output will be:
name1: Message for name2 - Hello
name2: Message for name1 - How are you?
- 1. Come eseguire le richiamate in Objective-C
- 2. Richiamate polimorfiche in Emacs/Elisp
- 3. Richiamate multiplexing
- 4. RhinoMocks - Parametri di recupero delle funzioni richiamate
- 5. Concatenamento di osservabili RxJava con richiamate/ascoltatori
- 6. Oggetto autenticazione Android Firebase senza richiamate che attivano
- 7. Controlla se il gestore di Android ha richiamate
- 8. Signalr si ferma a fare le richiamate dopo qualche minuto
- 9. Meteor: non più richiamate per la funzione "findOne"
- 10. vengono richiamate due volte senza nemmeno essere chiamate dal principale
- 11. Le richiamate si verificano sul thread principale (UI)?
- 12. Aggiungere un metodo per poi una funzione per le richiamate
- 13. Esiste un elenco completo di funzioni integrate che non possono essere richiamate con l'argomento parola chiave?
- 14. Javascript: le funzioni vengono richiamate al caricamento della pagina invece di onclick/onsubmit
- 15. cosa intendi registrando una funzione di callback in C?
- 16. Come richiamare le funzioni richiamate al chiamante, dopo essere stati chiamati?
- 17. Recupero modello Backbone.js: i parametri causano il successo/errore/le richiamate completate per non attivarsi
- 18. Problema nel restituire i dati recuperati dalle query DB richiamate nel ciclo
- 19. Simula C# come gli eventi in javascript
- 20. Prologo di funzione ed epilogo in C
- 21. try {} catch (...) {} in callback C - cattiva idea?
- 22. (nil) in C/C++
- 23. main() in C, C++, Java, C#
- 24. C/C++/C# Forza finestra in cima
- 25. stringa C maiuscolo in C e C++
- 26. Catch Ctrl-C in C
- 27. #include intestazioni in C/C++
- 28. come convertire C# in C++
- 29. (c = getchar())! = EOF in C#?
- 30. Debug C++ dll in C#
La mia risposta di seguito ti è stata d'aiuto? In tal caso, contrassegnarlo come risposta. Grazie. – gehho
Ciao Daniel, puoi selezionare una risposta e contrassegnarla come risposta. –