58 votes

Changements de rupture dans .NET 4.0

Il y a beaucoup d'informations sur les nouvelles fonctions et classes de la nouvelle version 4.0, mais il y a aussi des changements qui peuvent affecter les applications existantes, par exemple

  1. Timespan implémente maintenant IFormattable et l'ancien string.Format() avec des options invalides, une exception sera levée au lieu d'appeler la simple fonction ToString(). Cependant, l'équipe CLR propose une fonctionnalité intéressante permettant d'activer le comportement de la version précédente avec le paramètre de configuration - TimeSpan_LegacyFormatMode .

    CLR Inside Out

  2. L'accès aux événements à l'intérieur de la classe où ils sont déclarés à l'aide de += ou -= entraînera l'ajout ou la suppression d'accesseurs générés qui renvoient void. Certains codes ne seront même pas compilés en 4.0.

    Blog de Chris Burrows

  3. CAS est déprécié et pour l'activer il faut toujours utiliser un paramètre spécial dans la configuration - NetFx40_LegacySecurityPolicy

Je me demande donc quels sont les autres changements et s'il est possible de trouver au moins une liste préliminaire des changements qui vont ou peuvent casser les fonctionnalités existantes avec la sortie de .NET 4.0 ?

31voto

Alexandra Rusina Points 6063

L'équipe de documentation des langues publie des documents séparés pour les changements de rupture en C# et VB :

VB : http://msdn.microsoft.com/en-us/library/cc714070%28VS.100%29.aspx

C# : http://msdn.microsoft.com/en-us/library/ee855831%28VS.100%29.aspx

J'ai écrit celui de C# et j'ai inclus les changements de rupture de covariance et de contravariance mentionnés par Eric Lippert, et les changements d'événements discutés par Chris Burrows. Il y a également quelques changements concernant les paramètres optionnels, les types interop intégrés et l'inférence de type de groupe de méthodes.

Mise à jour :

Un autre document utile (de l'équipe de documentation .NET) : http://msdn.microsoft.com/en-us/library/ee941656%28VS.100%29.aspx

15voto

Eric Lippert Points 300275

Les conversions covariantes et contravariantes introduisent quelques changements obscurs mais potentiellement cassants lors de la recompilation :

http://blogs.msdn.com/ericlippert/archive/2007/11/02/covariance-and-contravariance-in-c-part-nine-breaking-changes.aspx

L'équipe d'éducation des utilisateurs de C# compile une liste des changements potentiels connus dans la nouvelle version du compilateur, voir la réponse ci-dessus pour plus de détails.

5voto

Bas Jansen Points 410

Notez également que SmtpClient implémente désormais IDisposable. Vous devez donc utiliser quelque chose comme ceci :

using (var smtpclient = new SmtpClient())
{
  smtpclient.Send(message);
} 

Selon cette page il pourrait y avoir davantage de ces "blocages cachés" dans le cadre de .NET 4.0. Et l'auteur suggère de les trouver en utilisant FxCop sur votre code.

2voto

Nick Craver Points 313913

Juste pour ajouter à la liste, Voici la liste officielle de l'ASP.Net pour la RC Je n'en ai pas encore trouvé de RTM.

0voto

Jim Points 2316

Je viens de corriger un bogue dans une application de production qui est passée récemment à .NET 4.0.

Les liaisons de données qui utilisent des propriétés imbriquées étaient lancées :

ArgumentException: Cannot bind to the property or column 'SomeProperty' on the DataSource.

Il semble qu'il s'agisse d'un problème connu avec une solution de contournement. Je n'ai pu le trouver sur aucune liste officielle et le bogue sur Microsoft Connect a été fermé comme "non reproductible".

Les propriétés imbriquées sont toutes définies dans des chaînes de caractères, j'ai donc dû les rechercher manuellement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X