Considérations relatives à la version et la mise à jour pour les développeurs C#

La compatibilité est un objectif très important alors que des nouvelles fonctionnalités sont ajoutées au langage C#. Dans presque tous les cas, le code existant peut être recompilé avec une nouvelle version du compilateur sans problème.

Vous devrez peut-être faire plus attention lorsque vous adoptez de nouvelles fonctionnalités de langage dans une bibliothèque. Vous créez peut-être une nouvelle bibliothèque avec des fonctionnalités incluses dans la version la plus récente et avez besoin de vous assurer que les applications créées à l’aide de versions précédentes du compilateur peuvent l’utiliser. Ou vous mettez peut-être à niveau une bibliothèque existante et la plupart de vos utilisateurs ne disposent pas encore des versions mises à niveau. Lorsque vous prenez des décisions sur l’adoption de nouvelles fonctionnalités, vous devez prendre en compte deux variantes de compatibilité : compatible source et compatible binaire.

Modifications compatibles binaires

Les modifications apportées à votre bibliothèque sont compatibles binaires lorsque votre bibliothèque mise à jour peut être utilisée sans régénérer les applications et les bibliothèques qui l’utilisent. Les assemblys dépendants n’ont pas besoin d’être reconstruits et aucune modification du code source n’est requise.

Modifications compatibles avec la source

Les modifications apportées à votre bibliothèque sont compatibles avec la source lorsque les applications et les bibliothèques qui utilisent votre bibliothèque n’ont pas besoin de modifier le code source, mais la source doit être recompilée par rapport à la nouvelle version pour fonctionner correctement.

Modifications incompatibles

Si une modification n’est ni compatible avec la source , ni compatible binaire, les modifications du code source, ainsi que la recompilation, sont nécessaires dans les applications et bibliothèques dépendantes.

Évaluer votre bibliothèque

Ces concepts de compatibilité affectent les déclarations publiques et protégées de votre bibliothèque, pas son implémentation interne. L’adoption de nouvelles fonctionnalités en interne est toujours compatible binaire.

les modifications compatibles binaires fournissent une nouvelle syntaxe qui génère le même code compilé pour les déclarations publiques que l’ancienne syntaxe. Par exemple, la modification d’une méthode en membre à expression nulle est une modification compatible binaire :

Code d'origine :

public double CalculateSquare(double value)
{
    return value * value;
}

Nouveau code :

public double CalculateSquare(double value) => value * value;

les modifications compatibles avec la source introduisent une syntaxe qui modifie le code compilé pour un membre public, mais d’une manière compatible avec les sites d’appel existants. Par exemple, la modification d’une signature de méthode à partir d’un paramètre by value vers un in paramètre by reference est compatible avec la source, mais n’est pas compatible binaire :

Code d'origine :

public double CalculateSquare(double value) => value * value;

Nouveau code :

public double CalculateSquare(in double value) => value * value;

Les Articles sur les nouveautés indiquent si l’introduction d’une fonctionnalité qui affecte les déclarations publiques est compatible avec la source ou compatible binaire.