Ist C # 4.0 abwärtskompatibel zu C # 2.0?

8

Darf ich wissen, was ist der Unterschied zwischen C # 4.0 und C # 2.0? Ist C # 4.0 abwärtskompatibel zu C # 2.0?

Kann ich sagen, dass C # 4.0 eine Obermenge von C # 2.0 ist (genau wie C ++ für C)?

Danke.

    
CMW 16.05.2010, 10:19
quelle

6 Antworten

12

C # 4.0 ist fast abwärtskompatibel mit früheren Versionen, aber es gibt ein paar brechende Änderungen . Für den meisten gewöhnlichen Code werden Sie diese brechenden Änderungen nicht bemerken.

Für die neuen Funktionen in C # 4 können Sie den Wikipedia-Artikel lesen, der eine recht gute Zusammenfassung enthält Beispiele. Die wichtigsten Punkte sind:

  • Dynamische Mitgliedersuche
  • Kovariante und kontravariante generische Typparameter
  • Optional ref Schlüsselwort bei der Verwendung von COM
  • Optionale Parameter und benannte Argumente
  • Indizierte Eigenschaften

Denken Sie auch daran, dass es eine andere Version dazwischen gab - C # 3.0. Eine der wichtigsten Ergänzungen hier ist LINQ und alle Features hinzugefügt, um es zu ermöglichen. Der Unterschied zwischen C # 2.0 und 3.0 ist viel größer als der Unterschied zwischen C # 3.0 und 4.0.

Übrigens ist nicht jeder gültige C-Code C ++ gültig, wie Sie in Ihrer Frage angedeutet haben. Siehe hier :

  

Im streng mathematischen Sinne ist C keine Teilmenge von C ++. Es gibt Programme, die zwar C, aber kein gültiges C ++ sind und sogar ein paar Arten, Code zu schreiben, der in C und C ++ eine andere Bedeutung hat.

    
Mark Byers 16.05.2010, 10:22
quelle
7

Es gibt einige subtile Änderungen, wie in früheren Versionen. Das Problem ist, dass C # 4 aufgrund der Kovarianz / Kontravarianz einen neuen Typ einer gültigen Konvertierung einführt. Dies bedeutet, dass einige Methoden, die früher nicht waren, jetzt für einen bestimmten Aufruf anwendbar sind. Hier ist ein Code, der sowohl für C # 4 als auch C # 2/3 gilt:

%Vor%

In C # 4 wird "Abgeleitet" gedruckt - in C # 2 und 3 wird "Basis" gedruckt.

Dieselbe Art von Problem trat zwischen C # 1 und 2 auf, wo Delegat-Instanzausdrücke nichtgenerische Kovarianz und Kontravarianz erlaubten.

Alle neuen Conversions sind so ziemlich an ein solches Problem gebunden. Meiner Erfahrung nach ist es jedoch unwahrscheinlich, dass diese Dinge tatsächlich ein Problem verursachen.

Darüber hinaus behandelt C # 4 Sperr- und Feld-ähnliche Ereignisse auf eine etwas andere Art und Weise - dies hat wiederum keinen Einfluss auf den meisten Code, aber es ist wissenswert. Chris Burrows hat eine Artikelserie über die Änderungen in seinem Blog.

    
Jon Skeet 16.05.2010 11:39
quelle
0

Ja, sie haben es so gemacht.

Was ist neu in C # 4.0

?     
Amr Elgarhy 16.05.2010 10:21
quelle
0

JA,

Alle Features von C # 2.0 sind immer noch in C # 4.0, aber es gibt neue Features in Version 4, die offensichtlich nicht in Version 2 sind.

Alles, was Sie in C # 2.0 geschrieben haben, funktioniert in C # 4.0.

Aber offensichtlich würde das Gegenteil nicht funktionieren .....

    
Goober 16.05.2010 10:22
quelle
0

Es wurden viele Features aus C # 2.0 wie folgt hinzugefügt:

  • C # 2.0; veröffentlicht mit .NET 2.0 und VS2005 (2005). Wichtige neue Features: Generics, anonyme Methoden, Nullable-Typen, Iterator-Blöcke
  • C # 3.0; veröffentlicht mit .NET 3.5 und VS2008 (2007). Wichtige neue Funktionen: Lambda-Ausdrücke, Erweiterungsmethoden, Ausdrucksbäume, anonyme Typen, implizite Typisierung (var), Abfrageausdrücke Ссылка - Ссылка
  • C # 4.0; veröffentlicht mit .NET 4.0 und VS2010 (2010). Wichtige neue Funktionen: späte Bindung (dynamisch), generische Varianz von Delegaten und Schnittstellen, mehr COM-Unterstützung, benannte Argumente und optionale Parameter Ссылка - Ссылка

Bitte überprüfen Sie die obigen Links, um die neuen Funktionen kennen zu lernen.

    
Amr Badawy 16.05.2010 10:37
quelle
0

Aber Vorsicht - achten Sie darauf, dass Sie veraltet sind - OracleClient in ADO.Net zum Beispiel ...

Martin

EDIT - Ja, Simon hat da einen Punkt ... Ich spreche wirklich von .Net. Entschuldigung ...

    
Martin Milan 16.05.2010 10:26
quelle

Tags und Links