Darkleo’s Blog
Ein Schatz, der seinen Besitzer überallhin begleitet.

Anonyme Methoden und ihr Einsatz

November 18th, 2007 by darkleo

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

Posted in .NET, C#

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.