2 Stimmen

Delegate funktioniert ohne Instanzerstellung

Meine beiden Versionen der folgenden Deklarationen funktionieren gut.

1) Func findMax=Max;
   Console.WriteLine("Max={0}",findMax(10,20));

2) Func findMax=new Func(Max);
   Console.WriteLine("Max={0}",findMax(10,20));

wo

public static T Max(T a, T b) where T:IComparable
{
            if (a.CompareTo(b) > 0) return a;
            else return b;
}

In Listing 2 habe ich die Delegaten instanziiert, aber in Listing 1 habe ich das nicht getan. Wie funktioniert der Code trotzdem gut für Listing 1 ohne die Instanziierung des Func-Delegaten?

4voto

Jon Skeet Punkte 1325502

Nein, in beiden Fällen haben Sie den Delegaten instanziiert. Es ist nur so, dass er in der ersten Version durch eine Methodengruppenkonvertierung versteckt ist. Die erste Form ist effektiv eine syntaktische Zucker für die zweite.

Grundsätzlich ist Max eine Methodengruppe, und eine Methodengruppe kann in jeden kompatiblen Delegattyp konvertiert werden.

2voto

SLaks Punkte 832502

Dies ist ein neues Feature in C# 2; der Compiler erstellt implizit die Delegatinstanz.

Dies ist nur eine reine syntaktische Zuckerung; das kompilierte IL ist identisch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X