C# 4.0 – Default Values und Delegates

Mit C# 4.0 gibt es sogenannte Default Values. Das heißt, ich kann den Parametern bei einem Methodenaufruf bereits definierte Werte mitgeben.
Beispiel:

void Foobar(string valueWithoutDefaultValue, string valueWithDefaultValue = "Ich bin ein Default Value") {
   // ..
}

Ich kann den 2. Parameter nun mit geben oder es eben sein lassen. Mehr dazu findet ihr hier. Nun wollte ich dies bei einem Delegaten ausnutzen. Der Delegate feuert nur mit einem Parameter, die Methode hat aber zwei Parameter, wobei der zweite einen Defaultwert hat.

public delegate void DelegateFoobar(string text);
public event DelegateFoobar foobarEvent;

Dies funktioniert nicht, der Compiler spuckt folgende Fehlermeldung:

No overload for 'Foobar' matches delegate 'TestApp.Classes.Test.foobarEvent'

Schade eigentlich, denn meiner Interpretation nach sollte es funktionieren. Gelöst habe ich es mit eine Lambda Expression:

testclass.foobarEvent += str => this.Foobar(str);

Funktioniert ohne Probleme.

3 Gedanken zu „C# 4.0 – Default Values und Delegates“

  1. Hallo Björn,

    erwähnenswert ist vielleicht noch, dass optionale Parameter nicht frei von Nebenwirkungen sind, weshalb man sich ihren Einsatz mehr als einmal überlegen sollte:

    http://www.des-eisbaeren-blog.de/post.aspx?id=7f3fd0a1-54f7-4fe5-8bdd-d076b7e0f375

    Viele Grüße,

    Golo

  2. Hallo Golo,

    das sollte man natürlich beachten. Mir war dies seit der Basta bekannt (hatte Oliver Sturm in seiner C#4.0 Session erläutert) und ich nutze nur ein Assembly.

    Aber vielen Dank für den Hinweis.

    Gruß
    Björn

  3. Pingback: welt-held.de

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.