2009-04-04 8 views
2

Quelle est la meilleure façon d'écrire un rappel? J'ai seulement besoin d'appeler 1 fonction qui a le sig de void (string, int); et ceci devrait invoquer une classe puisque j'ai des objs de membre que je dois traiter. Quel est le meilleur moyen d'écrire ceci? en C je passerais un pointeur de fonction et un void * obj. Je n'aime pas ça et je pense qu'il y a une meilleure façon de le faire en C#?Comment créer un rappel

+0

Vous allez devoir réécrire la question. Cela n'a pas beaucoup de sens et il n'y a pas de contexte. – Samuel

+0

Votre question n'est toujours pas très claire. Qu'est-ce qui devrait appeler quoi? – Samuel

Répondre

5

La méthode standard de manutention (ou le remplacement de la nécessité) callbacks en C# est d'utiliser des délégués ou des événements. Ceci fournit une manière très puissante et propre de gérer les rappels.

12

C# 3.0 introduit des lambdas qui vous permettent de quitter la déclaration de signatures de rappel (ou de délégué). Il vous permet de faire des choses comme:

static void GiveMeTheDate(Action<int, string> action) 
{ 
    var now = DateTime.Now; 
    action(now.Day, now.ToString("MMMM")); 
} 

GiveMeTheDate((day, month) => Console.WriteLine("Day: {0}, Month: {1}", day, month)); 
// prints "Day: 3, Month: April" 
+1

Je me demande pourquoi quelqu'un a downvoted ceci! Le code fonctionne, et il semble répondre à la question. –

+1

J'ai voté pour. Le 'pouvoir' corrompt, même certains d'entre nous, apparemment. – SinisterRainbow

1

Est-ce que c'est ce que vous voulez dire?

thatfunc(params, it, wants, Func<myObject> myCallbackFunc) 
{ 
    myObject obj = new Object(); 

    myCallbackFunc.Invoke(obj); 

//or 

    myCallbackFunc.Invoke(this); 

//I wasn't sure what if myObject contained thatFunc or not... 
}