C# | |
Apparu en | 2001 (dernière révision en 2010) |
---|---|
Auteur | Microsoft |
Paradigme | structuré, imperatif, orienté objet |
Typage | statique, fort, nominatif |
Dialectes | 1.0, 1.5 , 2.0 (ECMA), 3.0, 3.5, 4.0 |
Implémentations | Microsoft .NET, Mono |
Le C# (prononcé [siː.ʃɑːp]) est un langage de programmation orienté objet à typage fort, créé par la société Microsoft, et notamment un de ses employés, Anders Hejlsberg, le créateur du langage Delphi.
Il a été créé afin que la plate-forme Microsoft .NET soit dotée d'un langage permettant d'utiliser toutes ses capacités. Il est très proche du Java dont il reprend la syntaxe générale ainsi que les concepts (la syntaxe reste cependant relativement semblable à celles de langages tels que le C++ et le C). Un ajout notable à Java est la possibilité de surcharge des opérateurs, inspirée du C++. Toutefois, l'implémentation de la redéfinition est plus proche de celle du Pascal Objet.
Bien que le C# soit similaire à Java, il existe des différences notables, par exemple:
Le C# est, d’une certaine manière, le langage de programmation qui reflète le mieux l’architecture Microsoft .NET qui fait fonctionner toutes les applications .NET, et en est par conséquent extrêmement dépendant. Les types natifs correspondent à ceux de .NET, les objets sont automatiquement nettoyés par un ramasse-miettes(Garbage Collector en anglais), et beaucoup de mécanismes comme les classes, interfaces, délégués, exceptions, ne sont que des moyens explicites d’exploiter les fonctionnalités de la bibliothèque .NET. Pour achever de marquer cette dépendance, le CLR (Common Language Runtime) est obligatoire pour exécuter des applications écrites en C#, comme l’est la JVM (Java Virtual Machine ou Machine virtuelle Java) pour des applications Java.
Le langage compte un certain nombre de changements par rapport au C/C++ ; On notera particulièrement les points suivants :
IDisposable
pour spécifier des traitements à effectuer au moment de la libération de la ressource.int[] a = new int[5]
remplace int a[5]
. Car il s'agit d'une allocation dynamique, int[] a étant la déclaration d'une référence (nulle si non initialisée).Microsoft mit à disposition du public en octobre 2005, 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 :
yield
, équivalent du yield
que l’on trouve en Python.int? i = null;
.À titre de référence, les spécifications complètes des nouveautés introduites dans la version 2.0 sont disponibles dans les .
Anders Hejlsberg, le père de Delphi, s’est exprimé sur l’implémentation des génériques dans C#, Java et C++ dans cette interview (en).
La fonctionnalité des types nullables fut fixé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).
Le C# 3.0 fut présenté au salon PDC 2005. La version finale est disponible depuis le 19 novembre 2007 au téléchargement sur le site de Microsoft (en) . Les principales nouveautés sont les suivantes :
select
, from
et where
pour permettre la formation et l’exécution de requêtes SQL, XML, ou directement sur des collections. Cette fonctionnalité fait partie du programme Language Integrated Query (LINQ) (en).Client c = new Client(); c.Nom = "Dupont";
, on peut utiliser Client c = new Client{ Nom = "Dupont" };
ListeTrucs.Where( delegate(Truc x) { return x.Size > 10; } );
devient ListeTrucs.Where( x => x.Size > 10 );
string s = "Dupont"
peut être remplacé par var s = "Dupont"
var x = new { Nom = "Dupont" }
peut être utilisé à la place de class __anonymous { private string _nom; public string Nom { get { return _nom; } set { _nom = value; } } } __anonymous x = new __anonymous(); x.Nom = "Dupont";
this
.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…) ne sont cependant pas utilisable avec les versions précédentes de C#.
Cette version exige Windows XP ou une version supérieure (Vista). Elle n'est pas disponible pour Windows 2000.
Le framework .NET 4.0 est sorti le 12 avril 2010, accompagné de Visual Studio 2010.. Il supporte entre autres le typage dynamique des variables, et les paramètres optionnels.