Ich verwende auch in meinen Projekten anonyme Funktionen. Bisher dachte ich, dass der C#-Compiler lediglich eine Methode mit dem im selben Klassen verwendeten Code für die anonyme Methode generiert. Aber nachdem ich diesen Code in IL dekompiliert habe, habe ich gesehen, dass die CLR eine neue Klasse erstellt hat.
public class Comparer
{
public delegate int Greater(int a, int b);
public int Great(Greater greater, int a, int b)
{
return greater(a, b);
}
}
static void Main(string[] args)
{
int valueOfA = 11,
valueOfB = 23,
valueOfC = 42;
Comparer comparer = new Comparer();
Console.WriteLine("Das Größere ist \t:{0}",
comparer.Great(delegate(int a, int b)
{
int[] numbers = new int[] { a, b, valueOfC };
return Math.Max(Math.Max(a, b), valueOfC);
},
valueOfA, valueOfB));
}
Hier ist der dekompilierte IL-Code der Main-Methode:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 65 (0x41)
.maxstack 5
.locals init ([0] int32 valueOfA,
[1] int32 valueOfB,
[2] class Ch04.Comparer comparer,
[3] class Ch04.Program/'<>c__DisplayClass1' 'CS$<>8__locals2') // Hier ist es
...
}