C Sharp

Page d’aide sur l’homonymie

Pour les articles homonymes, voir Sharp et .cs.

C#
Logo.
Code en C# retournant à la console : "Hello World!"
Code en C# retournant à la console : "Hello World!"

Date de première version Voir et modifier les données sur Wikidata
Paradigme Structuré, impératif, orienté objet
Auteur Microsoft
Dernière version 14.0 ()Voir et modifier les données sur Wikidata
Typage Statique, fort, nominatif
Dialectes 1.0, 1.1, 1.2, 2.0 (ECMA), 3.0, 3.5, 4.0, 5.0, 6.0, 7.0, 7.1, 7.2, 7.3, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0
Influencé par C++, Java
A influencé Swift, Vala, F#, Kotlin, TypeScript
Implémentations Microsoft .NET, Mono, DotGNU
Écrit en C#Voir et modifier les données sur Wikidata
Système d'exploitation Multiplate-forme
Site web docs.microsoft.com/en-us/dotnet/csharpVoir et modifier les données sur Wikidata
Extension de fichier .cs

C# (C sharp [siː.ʃɑːp] en anglais britannique) est un langage de programmation orientée objet, commercialisé par Microsoft depuis 2002 et destiné à développer sur la plateforme Microsoft .NET, au même titre que d’autres langages liés à cette plateforme (ex. : VB .NET, J#, etc.).

C# est dérivé du C++ et très proche du Java dont il reprend la syntaxe générale ainsi que les concepts, y ajoutant des notions telles que la surcharge des opérateurs, les indexeurs (en) et les délégués (en). Il est utilisé notamment pour développer des applications web sur la plateforme ASP.NET, ainsi que des jeux vidéo avec les moteurs de jeux Unity et Godot.

Présentation

C# est un langage de programmation orientée objet, fortement typé, dérivé de C et de C++, ressemblant au langage Java. Il est utilisé pour développer des applications web, ainsi que des applications de bureau, des services web, des commandes, des widgets ou des bibliothèques de classes. En C#, une application est un lot de classes où une des classes comporte une méthode Main, comme cela se fait en Java.

C# est destiné à développer sur la plateforme .NET, une pile technologique créée par Microsoft pour succéder à COM.

Les exécutables en C# sont subdivisés en assemblies, en namespaces, en classes et en membres de classe. Un assembly est la forme compilée, qui peut être un programme (un exécutable) ou une bibliothèque de classes (une dll). Un assembly contient le code exécutable en CIL, ainsi que les symboles. Le code CIL est traduit en langage machine au moment de l'exécution par la fonction just-in-time de la plateforme .NET.

Plateforme .NET

C# est destiné à développer sur la plateforme .NET. Le cœur de cette pile technologique est le framework .NET, composé de :

Un autre produit de la plateforme .NET est l'environnement de développement Visual Studio .NET, outil généralement utilisé pour programmer en C#.

Caractéristiques

C# est un langage dérivé du C++, il apporte un typage sûr, ainsi que les possibilités d'encapsulation, d'héritage et de polymorphisme des langages orientés objet. En C# tous les types sont des objets. Le langage comporte un ramasse-miettes et un système de gestion d'exceptions.

Le typage sûr signifie notamment que les opérations suivantes sont refusées : utilisation de variable non initialisée, tentative d'accéder au-delà des limites d'un tableau, conversions de type dont les résultats ne sont pas prévisibles, dépassement des limites lors d'opérations arithmétiques.

Beaucoup de possibilités de Java se retrouvent dans C# et il y a une forte ressemblance entre un code écrit en C# et le code équivalent en Java.

En C# les variables peuvent être d'un type valeur ou d'un type référence. Les types valeur sont les types primitifs, les énumérations, les struct et les types nullable. Les types référence sont les classes, les interfaces, les tableaux et les delegate.

Types primitifs

Les types primitifs sont sbyte, short, int, long, byte, ushort, uint, ulong, char, float, double, decimal et bool.

class

Les constructions les plus fondamentales du langage C# sont les classes. Celles-ci peuvent contenir des constantes, des champs, des propriétés, des indexeurs, des méthodes, des événements, des opérateurs, des constructeurs, des destructeurs ou des sous-classes. Les classes élémentaires sont string et object.

struct

Les struct sont similaires aux classes, mais ce sont des types valeurs et ils ne peuvent pas être hérités.

delegate

Un delegate est une référence à une méthode qui comporte certains paramètres. Les delegates permettent d'assigner des méthodes à des variables et les passer en paramètre.

enum

Un type énuméré est un type valeur qui comporte un lot de constantes. Chaque type énuméré a un type sous-jacent : un type primitif déterminé en fonction des valeurs des constantes.

type nullable

Les nullable sont des types primitifs qui peuvent en plus avoir la valeur null. Chaque type primitif T a un type nullable associé T?. Par exemple une variable de type int? peut contenir un int ou null.

Syntaxe

Exemple de code :

using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Salut tout le monde!");
    }
}

Exemple en .NET 10

using System; 

// Ecris Bonjour, le monde dans la console 
Console.WriteLine("Bonjour, tout le monde !");
Mots clé

Les mots clé de C# 1.0 sont :

abstract       class          event          if             new            readonly
as             const          explicit       implicit       null           ref
base           continue       extern         in             object         return
bool           decimal        false          int            operator       sbyte
break          default        finally        interface      out            sealed
byte           delegate       fixed          internal       override       short
case           do             float          is             params         sizeof
catch          double         for            lock           private        stackalloc
char           else           foreach        long           protected      static
checked        enum           goto           namespace      public         string

struct         throw          typeof         unchecked      using          volatile
switch         true           uint           unsafe         virtual        while
this           try            ulong          ushort         void

Les mots clés ajoutés entre C# 2.0 et 6.0 :

add            dynamic        join           select
alias          equals         let            set
ascending      from           nameof         value
async          get            on             var
await          global         orderby        where
by             group          partial        when
descending     into           remove         yield

La syntaxe de C# permet de réaliser des chaînes de caractères numériques dont le format est modifiable, notamment avec TimeSpan pour la réalisation de chronomètre ou minuteur.

Différences avec le C++

Le langage compte un certain nombre de changements par rapport au C/C++ ; on notera particulièrement les points suivants :

Différences avec le Java

Bien que le C# soit similaire à Java, il existe des différences notables, par exemple :

Histoire

C'est en que la plateforme .NET et C# sont présentés au public. C# devient le langage de facto de cette plateforme, il a par ailleurs été utilisé pour implémenter une partie de la plateforme .NET.

Versions

AnnéeVersionBibliothèquePrincipal changement
20021.0.NET framework 1.0 et 1.1
20052.0.NET framework 2.0généricité ajoutée à C# et au framework
20083.0.NET framework 3.5LINQ (Language INtegrated Queries)
20104.0.NET framework 4.0types dynamiques
20125.0.NET framework 4.5méthodes asynchrones
20156.0.NET framework 4.6version pour Linux
20177.0 - 7.3.NET framework >= 4.5 et .NET Core 2.XTuples, fonctions locales
2019 8.0 .NET standard >=2.1 et .NET Core >=3.0 Membre ReadOnly, opérateur d’assignation de fusion
2020 9.0 .NET 5.0 Vérification de nullité, instructions de niveau racine
2021 10.0 .NET 6.0 Directives d’utilisation globale, modèles de propriété étendus
2022 11.0 .NET 7.0 Attributs générique, membre requis, chaîne brute
2023 12.0 .NET 8.0 Simplification de code
2024 13.0 .NET 9.0 Amélioration params, lock
2025 14.0 .NET 10.0 Mot clé field, affectation conditionnelle en cas de null

C# 2.0

Microsoft mit à disposition du public en , après une longue période de beta-tests, la version 2.0 de la bibliothèque .NET, accompagnée d’une nouvelle version de la quasi-totalité des outils associés. C# ne fait pas exception à la règle et sort donc en version 2.0, avec les ajouts suivants :

À titre de référence, les spécifications complètes des nouveautés introduites dans la version 2.0 sont disponibles dans les liens externes.

La fonctionnalité des types nullables fut corrigée quelques semaines seulement avant la sortie publique de la version 2.0, car il a été mis en lumière que si la valeur de la variable était bien nulle, cette variable n’était pas nulle au sens traditionnel du terme, c'est-à-dire qu’il ne s’agit pas d’une référence vide. Ainsi, la conversion d’un type primitif de valeur nulle en objet donnait une référence non nulle vers une valeur nulle. Il fallut donc, pour corriger ce problème, corriger le noyau du CLR et effectuer de nombreuses vérifications et corrections sur tous les produits de la gamme .NET 2.0 (Visual Studio 2005, SQL Server 2005, C# et VB.NET).

C# 3.0

Le C# 3.0 fut présenté au salon Processing Community Day 2005. La version finale est disponible depuis le au téléchargement sur le site de Microsoft. Les principales nouveautés sont les suivantes :

Une présentation du C# 3.0 et de LINQ peut être trouvée sur la page du centre de développement de .NET Framework.

Le code compilé en C# 3.0 est entièrement compatible avec celui du 2.0, étant donné que les améliorations apportées ne sont que purement syntaxiques ou ne consistent qu’en des raccourcis compensés au moment de la compilation. Les nouveautés introduites dans les bibliothèques de la version 3.5 (LINQ, etc.) ne sont cependant pas utilisables avec les versions précédentes de C#.

Cette version exige Windows XP ou une version supérieure (Vista ou Windows 7). Elle n'est pas disponible pour Windows 2000.

C# 4.0

La version 4 du langage apporte plusieurs nouveautés :

Le framework .NET 4.0 est sorti le , accompagné de Visual Studio 2010. Il propose entre autres :

C# 5.0

La version 5 du langage permet de programmer plus simplement des programmes asynchrones grâce à l'ajout des mots clés async et await.

Le comportement des closures dans la boucle foreach (de) a été modifié. Il n'est désormais plus nécessaire d'introduire une variable locale dans une boucle foreach pour éviter les problèmes de closure.

À noter également les informations relatives à l'appelant permettant de connaître le nom de la méthode qui a appelé une propriété.

C# 6.0

La sixième version du C# apporte plusieurs modifications, notamment :

Les propriétés implémentées automatiquement (ou propriétés automatiques) sont apparues en C# 3, pour simplifier la déclaration de propriétés qui se contentent d'encapsuler l'accès à des champs. Bien qu'elles permettent de rendre le code plus concis, elles présentent un inconvénient : il n'est pas possible de les initialiser au niveau de la déclaration, il faut forcément le faire dans le constructeur. De plus, il n'est pas possible de faire des propriétés automatiques en lecture seule, puisqu'elles n'ont pas de mutateur (setter) et on ne pourrait donc pas leur affecter de valeur.

C# 6 remédie à ce problème en permettant d'initialiser les propriétés automatiques au niveau de la déclaration.

C# 7.0

La version 7 du langage apporte de nombreuses nouveautés dont les principales sont:

C# 8.0

La version 8 de C# est la première qui cible spécifiquement .NET Core.

Quelques nouveautés :

public void UseDisposableObject() 
{ 
  using var disposableObject = new DisposableObject(); 

  // Utilisation de disposableObject 
  // ... 

  // disposableObject.Dispose() est exécuté juste avant la sortie de la méthode 
}

C# 9.0

La version 9 de C# comprend entre autres les nouveautés suivantes:

C# 10.0

La version 10 de C# comprend entre autres les nouveautés suivantes:

C# 11.0

Les principales nouveautés de la version 11 sont:

C# 12.0

La version 12 de C# comprend les nouveautés suivantes:

C# 13.0

La version 13 de C#, introduite avec .Net 9, comprend les nouveautés suivantes :

C# 14.0

La version 14 de C# apporte les principales nouveautés:

public void UpdateLastActivity(User user)
{
  user?.LastActive = DateTime.UtcNow;
}

Jusqu'à présent, l'opérateur ?. ne pouvait être utilisé que pour les vérifications et non pour les affectations:

if (user?.LoggedIn == true) // OK
{
  user?.LoggedIn = false; // Error
}

Standardisation

Le C# a été normalisé par l'ECMA (ECMA-334) en et par l'ISO/CEI (ISO/CEI 23270) en 2003.

Les modifications survenues dans la Version 2.0 ont été normalisées par l'ECMA (ECMA-334) en et par l'ISO/CEI (ISO/CEI 23270:2006) en .

Microsoft a ouvert le code source de certaines bibliothèques utilisées par le C# en sous la licence Microsoft Reference Source License (MS-RSL).

Nom du langage

Le standard ECMA 334 et l'ISO 23270 définissent le nom du langage comme le caractère Unicode 0043 (C majuscule) suivi du caractère 0023 (#). Il est prononcé « C sharp » et non « C hash », « sharp » désignant en effet le symbole musical ♯ mais # étant nécessaire pour un accès facile depuis un clavier d'ordinateur qui propose le croisillon (« hash ») à la place.

Le nom "C#" est inspiré de la notation musicale où un dièse indique que la note écrite doit être augmentée d'un demi-ton. Ceci est similaire au nom de langage de C++, où "++" indique qu'une variable doit être incrémentée de 1 après avoir été évaluée. Le symbole # ressemble également à une ligature de quatre symboles "+" (dans une grille deux par deux), ce qui implique que le langage est un incrément de C++[réf. souhaitée].

Voir aussi

Bibliographie

Articles connexes

Sur les autres projets Wikimedia :

Liens externes

Notes et références

  1. ↑ « What's new in .NET 10 » (consulté le )
  2. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 (en) Balagurusamy, Programming In C#, Tata McGraw-Hill Education - 2008, (ISBN 9780070667570).
  3. ↑ (en) Paul Hill Neowin ·, « Godot Engine arrives on Epic Games Store making it easier to download », sur Neowin, (consulté le ).
  4. 1 2 3 4 5 6 7 8 9 10 11 (en) Anders Hejlsberg - Mads Torgersen - Scott Wiltamuth - Peter Golde, The C# Programming Language (Covering C# 4.0), Portable Documents, Addison-Wesley Professional - 2010, (ISBN 9780132481724).
  5. 1 2 3 (en) Mark Michaelis - Eric Lippert, Essential C# 6.0, Addison-Wesley Professional - 2015, (ISBN 9780134176130).
  6. ↑ (en) « Custom numeric format strings », sur microsoft.com (consulté le ).
  7. ↑ (en) « Custom TimeSpan format strings », sur microsoft.com (consulté le ).
  8. ↑ « Site MSDN », sur microsoft.com.
  9. ↑ (en) Microsoft Learn, « DllImportAttribute Class (System.Runtime.InteropServices) », sur Microsoft Learn, (consulté le ).
  10. ↑ (en) Support du cours de sous-typage du MPRI[PDF], diapositives 73-80 et 70-89.
  11. ↑ (en) Processing Foundation, « Processing Foundation — Processing Community Day @ Worldwide », sur Processing Foundation (consulté le ).
  12. ↑ (en) https://msdn2.microsoft.com/en-us/vstudio/default.aspx
  13. ↑ (en) https://msdn2.microsoft.com/fr-fr/netframework/aa904594.aspx
  14. ↑ (en) Microsoft Learn, « Expression Trees - C#, Microsoft Learn », sur Microsoft Learn, (consulté le ).
  15. ↑ https://msdn.microsoft.com/fr-fr/library/vstudio/dd264739(v=vs.100).aspx
  16. ↑ (en) Site MSDN.
  17. ↑ (en) Microsoft Learn, « Task Parallel Library (TPL) - .NET, Microsoft Learn », sur Microsoft Learn, (consulté le ).
  18. ↑ (en) Microsoft Learn, « Introduction to PLINQ - .NET, Microsoft Learn », sur Microsoft Learn, (consulté le ).
  19. ↑ http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx
  20. ↑ https://msdn.microsoft.com/fr-fr/library/hh534540.aspx
  21. ↑ Thomas Levesque, « Les nouveautés de C# 6 », sur Developpez.com (consulté le ).
  22. ↑ Thomas Levesque, « Les nouveautés de C# 7 », Developpez.com,‎ (lire en ligne, consulté le )
  23. ↑ Mathias Montantin, « Pattern matching (C# 7, C# 8.0) », sur Blog .NET, (consulté le )
  24. 1 2 Mathias Montantin, « Fonctionnalités C# 8.0 », sur Blog .NET, (consulté le )
  25. ↑ Mathias Montantin, « Membre d'une structure en lecture seule avec readonly (C# 8.0) », sur Blog .NET, (consulté le )
  26. ↑ Mathias Montantin, « Références nullables (C# 8.0) », sur Blog .NET, (consulté le )
  27. ↑ Mathias Montantin, « Les fonctionnalités C# 9.0 », sur Blog .NET, (consulté le )
  28. ↑ Mathias Montantin, « Les fonctionnalités C# 10.0 », sur Blog .NET, (consulté le )
  29. ↑ « Les nouveautés de C# 11 - Invivoo », sur invivoo.com (consulté le )
  30. ↑ Mathias Montantin, « Les fonctionnalités C# 12 », sur Blog .NET, (consulté le ).
  31. ↑ Abdelkrim Bourennane, « Les nouveautés .NET 9 et C# 13 avec des exemples », sur Le blog de Cellenza, (consulté le ).
  32. 1 2 (en) Dmitrii Kharitonov, « What′s new in C# 14: overview », sur PVS-Studio, (consulté le )
  33. ↑ « Microsoft Reference Source License (MS-RSL) », sur GitHub.
  34. ↑ ECMA 334, p. 11