Entwickler-Ecke

C# - Die Sprache - Was genau ist eigentlich der Sinn von Delegaten?


Felix2000 - Di 09.08.11 11:37
Titel: Was genau ist eigentlich der Sinn von Delegaten?
Hi Folks !

kann mir das vielleicht jemand von euch erläutern und kann man diese Delegaten in Kombination mit anonymen Klassen in C# verwenden?

Greetz
Felix


dark-destination1988 - Di 09.08.11 16:22

soweit ich weiss werden diese genutzt um ungültige Steuerelement zugriffe zu verhindern. Wenn du beispielsweise einen thread hast und dieser soll eine Textbox.Text verändern, so funktioniert dies nicht "Ungültiger Threadübergreifender Zugriff" (oder so ähnlich), das passiert bei delegaten nicht


Th69 - Di 09.08.11 16:41

Oh, oh - 2 völlig Unwissende ;-)

Ein Delegate [http://msdn.microsoft.com/de-de/library/ms173171.aspx] ist nichts anderes als eine Methodensignatur, d.h. es bestimmt den Rückgabewert sowie die Parameter, z.B.

C#-Quelltext
1:
delegate int MyDelegate(string s, bool b);                    


Sobald nun eine Methode ein Delegate als Parameter hat, z.B.

C#-Quelltext
1:
void DoSomething(MyDelegate del)                    

kann man diese Methode nun mit jeder Methode als Parameter aufrufen, die dieselbe Signatur (*) wie der Delegate haben.

Um nun eine Methode als Parameter zu übergeben gibt es mehrere Möglichkeiten:
1. eine benannte Methode
2. eine anonyme Methode [http://msdn.microsoft.com/de-de/library/0yw3tz5k.aspx]
3. ein Lambda-Ausdruck [http://msdn.microsoft.com/de-de/library/bb397687.aspx]


(*) Erweiterte Stichworte sind Kovarianz und Kontravarianz [http://msdn.microsoft.com/de-de/library/ee207183.aspx] (Co- and Contravariance), so daß auch ähnliche Methoden übergeben werden können...