Also, mit einem Delegate legst Du die Signatur einer Methode fest, definierst im Prinzip einen Methoden-Typen.
C#-Quelltext
1:
| public delegate void aDelegate(String foo); |
Damit sagst Du, dass Methoden, welche nichts (void) zurückgeben und einen String "foo" als Parameter erhalten vom Typ "aDelegate" sind.
Wozu braucht man das jetzt? Wenn Du einen Delegate hast, kannst Du auch Variablen anlegen, die von diesem Typ sind:
C#-Quelltext
1:
| public aDelegate aMethod; |
Diese kannst Du dann aufrufen:
C#-Quelltext
1: 2:
| if (aMethod != null) aMethod("bar"); |
Du rufst also über den Variablennamen auf, welche Methode man dieser Variable auch immer vorher zugewiesen hat.
Ich habe mal eine kleine Konsolenanwendung als Verdeutlichung geschrieben:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| using System; using System.Collections.Generic; using System.Text;
namespace ConsoleApplication2 { class Program { static void Main(string[] args) { TestClass aTestClass = new TestClass();
aTestClass.DoTest(); Console.ReadLine(); } }
public class TestClass { public delegate void aDelegate(String Foo); public aDelegate aMethod; public void OneMethod(String Foo) { Console.WriteLine("Method 1: " + Foo); }
public void AnotherMethod(String Foo) { Console.WriteLine("Method 2: " + Foo); }
public void DoMethod() { if (aMethod != null) aMethod("bar"); }
public void DoTest() { aMethod = OneMethod; DoMethod(); aMethod = AnotherMethod; DoMethod(); } } } |
Hoffe, damit wird das etwas klarer.
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".