8

Ich bin gespannt, ob der in C# 4 eingeführte optionale Parameter abwärtskompatibel ist oder nicht?Ist der optionale Parameter in C# 4 abwärtskompatibel?

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

public void Foo(int val1, int val2, int val3 = 5){ .... } 

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

  1. zwei überladene Methoden wie:

    public void Foo(int val1, int val2) 
    public void Foo(int val1, int val2, int val3) 
    
  2. etwas anderes wie:

    public void Foo(int val1, int val2, int val3) 
    public void Foo(int val1, int val2, int val3 = 5) //VS2008 is not supposed to show this 
    

Wie kann ich die C# 4 Methode in C# 2-Projekt nennen bin soll ?

Antwort

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, also müssen Sie alle Argumente selbst angeben.

Grundsätzlich optionale Parameter ändern nur, wie Methoden aufgerufen werden. Wenn es wie dies ein Verfahren ist:

public void Foo(int x = 10, int y = 20) 

und rufen Sie es wie folgt:

Foo(15); 

der C# 4 Compiler wird die Aufruf Seite ändern:

Foo(15, 20); 

Die C# 2 Compiler kann das nicht, also müssten Sie beide Argumente angeben.

+0

Vielen Dank. Es verdeutlicht meine Frage. Vielen Dank. –

9

Sie sehen eine einzelne Methode, die alle Parameter enthält.

Methoden mit optionalen Parametern in C# 4 und jeder Version von VB werden als eine 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 unter here.