Anonyme Methoden und ihr Einsatz
Was sind anonyme Methoden?
Einfach gesagt bieten diese Methoden eine Möglichkeit, einen Codeblock als Delegatparameter zu übergeben.
button1.Click += delegate(System.Object o, System.EventArgs e)
// anonyme Methode
{
System.Windows.Forms.MessageBox.Show("Click!");
};
Der Code ist nicht mehr mit einem Methodenbezeichner namentlich verbunden und wird deshalb als anonyme Methode bezeichnet.
Vorteil:
Durch anonyme Methoden wird der Codierungsaufwand des Instanziierens von Delegaten reduziert, weil keine separaten Methoden mehr erstellt werden müssen.
Einsatz von Anonymen Methoden in Listen ab .NET 2.0:
//Wir erstellen eine Klasse Person
public class Person
{
public int alter;
public string name;
public Person(string name,int alter)
{
this.alter = alter;
this.name = name;
}
}
Wir erstellen eine Liste von Personen
List<Person> people = new List<Person>();
people.Add(new Person(50, "Eric"));
people.Add(new Person(25, "Guido"));
people.Add(new Person(24, "Matthias"));
people.Add(new Person(26, "Paul"));
Console.WriteLine("Liste");
people.ForEach(delegate(Person p) { Console.WriteLine(String.Format("{0} {1}", p.alter, p.name)); });
List<Person> young = people.FindAll(delegate(Person p) { return p.alter < 25; });
Console.WriteLine("Alter kleiner als 25");
young.ForEach(delegate(Person p) { Console.WriteLine(String.Format("{0} {1}", p.alter, p.name)); });
Console.WriteLine("Sortierte Liste nach Name");
people.Sort(delegate(Person p1, Person p2) { return p1.name.CompareTo(p2.name); });
people.ForEach(delegate(Person p) { Console.WriteLine(String.Format("{0} {1}", p.alter, p.name)); });
people.Sort(delegate(Person p1, Person p2) { return p1.alter.CompareTo(p2.alter); });
Console.WriteLine("Sortierte Liste nach Alter");
people.ForEach(delegate(Person p) { Console.WriteLine(String.Format("{0} {1}", p.alter, p.name)); });
Ausgabe:
Liste
50 Eric
25 Guido
24 Matthias
26 Paul
22 Marcel
Alter kleiner als 25
24 Matthias
22 Marcel
Sortierte Liste nach Name
50 Eric
25 Guido
22 Marcel
24 Matthias
26 Paul
Sortierte Liste nach Alter
22 Marcel
24 Matthias
25 Guido
26 Paul
50 Eric
Einsatz von Anonymen Methoden in Arrays ab .NET 2.0:
Die Anonymen Methoden gibt es auch noch in der Systemklasse Array, mit folgenden Methoden:
BinarySearch
ConvertAll
Exists
Find
FindAll
FindIndex
FindLast
FindLastIndex
ForEach
Sort
TrueForAll
Person[] personen = new Person[5];
personen[0] = new Person( "Eric",50);
personen[1] = new Person( "Guido",25);
personen[2] = new Person("Matthias", 24);
personen[3] = new Person("Paul", 26);
personen[4] = new Person("Marcel", 22);
Console.WriteLine("Liste");
Array.ForEach<Person>(personen, delegate(Person p) { Console.WriteLine(String.Format("{0} {1}", p.alter, p.name)); });
...
Ausgabe:
Liste
50 Eric
25 Guido
24 Matthias
26 Paul
22 Marcel