Ist der optionale Parameter in C # 4 abwärtskompatibel?

8

Ich bin neugierig zu wissen, ob der optionale Parameter in C # 4 rückwärtskompatibel ist oder nicht?

Lassen Sie mich meine Frage mit einem einfachen Beispiel klären. Angenommen, ich schreibe den folgenden Code in C # 4 auf .Net2 in VS2010:

%Vor%

Nun habe ich den Code kompiliert, eine DLL erstellt und auf ein C # 2 / C # 3-Projekt auf .Net2 verwiesen. Im Code-Editor (außer VS2010, sagen VS2008) was ich in Intellisense sehen werde?

  1. Zwei überladene Methoden wie:

    %Vor%
  2. Etwas anderes wie:

    %Vor%

Wie soll ich die C # 4-Methode in C # 2-Projekt aufrufen?

    
Anindya Chatterjee 13.07.2010, 20:11
quelle

2 Antworten

9

Es wird nur eine Methode sein - der C # -Compiler erstellt keine Überladungen. Es ist so, als würden Sie eine in VB.NET erstellte Methode mit optionalen Parametern aufrufen - sie waren von Anfang an in .NET. Es ist nur so, dass der C # 2-Compiler nicht weiß, wie er damit umgehen soll. Sie müssen also alle Argumente selbst angeben.

Grundsätzlich optionale Parameter ändern nur, wie Methoden aufgerufen werden. Wenn es eine Methode wie folgt gibt:

%Vor%

und du nennst es so:

%Vor%

Der C # 4-Compiler wird die aufrufende -Seite in

ändern %Vor%

Der C # 2-Compiler kann das nicht, daher müssten Sie beide Argumente angeben.

    
Jon Skeet 13.07.2010, 20:14
quelle
9

Sie sehen eine einzelne Methode mit allen Parametern.

Methoden mit optionalen Parametern in C # 4 und jeder Version von VB werden als eine einzige Methode mit CIL-Metadaten kompiliert, die angeben, welche Parameter optional sind und welche Standardwerte sie haben.
C # 3 (sowohl der Compiler als auch Visual Studio IntelliSense) ignoriert diese Metadaten.

Weitere Informationen finden Sie hier .

    
SLaks 13.07.2010 20:14
quelle