2009-04-04 5 views
2

Was ist der beste Weg, um einen Rückruf zu schreiben? Ich muss nur 1 Funktion aufrufen, die das Signal void (string, int) hat; und das würde eine Klasse aufrufen müssen, da ich Member-Objekte habe, die ich verarbeiten muss. Was ist der beste Weg dies zu schreiben? in C würde ich einen Func-Zeiger und ein void * obj übergeben. Ich mag das nicht und ich vermute, dass es einen besseren Weg gibt, dies in C# zu tun?Wie sollte ich einen Rückruf erstellen

+0

Sie werden die Frage neu schreiben müssen. Es macht keinen großen Sinn und es gibt keinen Zusammenhang. – Samuel

+0

Ihre Frage ist noch nicht sehr klar. Was soll was rufen? – Samuel

Antwort

5

Der übliche Weg der Handhabung (oder die Notwendigkeit für den Ersatz) Rückrufe in C# ist Delegierten oder Veranstaltungen zu nutzen. See this tutorial for details.

Dies bietet eine sehr leistungsfähige, saubere Art der Behandlung von Rückrufen.

12

In C# 3.0 wurden Lambdas eingeführt, mit denen Sie auf die Deklaration von Callback- (oder Delegat-) Signaturen verzichten können. Es ermöglicht Ihnen, Dinge wie:

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

Ich frage mich, warum jemand das abgelehnt hat! Der Code funktioniert, und es scheint die Frage zu beantworten. –

+1

Ich habe es gewählt. "Macht" korrumpiert, selbst einige von uns Nerds. – SinisterRainbow

1

Ist das was du meinst?

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... 
} 
Verwandte Themen