|
Introduction: Le C# 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++. Il convient toutefois de remarquer que l'implémentation de la redéfinition est plus proche de celle du Pascal Objet, peut-être parce que Anders Hejlsberg était auparavant responsable du Turbo Pascal et de Delphi, chez Borland. Plate forme d'execution: La plate-forme Microsoft .NET (possibilité de mixage avec des modules d'autres langages) Des implémentations libres de ce langage et de sa plate-forme d'exécution sont en cours de finalisation, comme le projet Mono maintenu par Novell, ou dotGNU maintenu par la Free Software Foundation. L'idée fondatrice de ces projets est qu'une application en C# puisse s'exécuter sans modification sur une plate-forme propriétaire comme Windows ou libre comme Linux.
Capacités du langage: 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, 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 : La manipulation directe de pointeurs ne peut se faire qu’au sein d’un code marqué unsafe, et seuls les programmes avec les permissions appropriées peuvent exécuter des blocs de code unsafe. La plupart des manipulations de pointeurs se font via des références sécurisées, dont l’adresse ne peut être directement modifiée, et la plupart des opérations de pointeurs et d’allocations sont contrôlées contre les dépassements de mémoire. Les pointeurs ne peuvent pointer que sur des types de valeurs, les types objets, manipulés par le ramasse-miettes, ne pouvant qu’être référencées. Les objets ne peuvent pas être explicitement détruits. Le ramasse-miettes s’occupe de libérer la mémoire lorsqu’il n’existe plus aucune référence pointant sur un objet. Toutefois, pour les objets gérant des types non managés, il est possible d’implémenter l’interface IDisposable pour spécifier des traitements à effectuer au moment de la libération de la ressource. L’héritage multiple de classes est interdit, mais une classe peut implémenter un nombre illimité d’interfaces, et une interface peut hériter de plusieurs interfaces. Le C# est beaucoup plus typé que le C++ ; les seules conversions implicites sont celles entre les différentes gammes d’entiers et celles d’un type dérivé à un type parent. Aucune conversion implicite n’a lieu entre booléens et entiers, entre membres d’énumération et entiers, ni de pointeurs sur un type void (quoique pour ce dernier point l’utilisation de références sur le type Object permette d’obtenir le même effet), et toutes les conversions définies par l’utilisateur doivent être invoquées explicitement, contrairement aux constructeurs de copie du C++. La syntaxe pour la déclaration des tableaux n’est pas la même : 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). Les membres d’une énumération sont rassemblés dans leur propre espace de noms. Le C# ne supporte pas les templates, mais cette fonctionnalité a été remplacée par les types génériques apparus avec C# 2.0. Les propriétés ont été introduites, et proposent une syntaxe spécifique pour l’accès aux données membres (ainsi que la facilitation de l’accès simultané par plusieurs threads). La réflexion totale des types est disponible. Les délégués, qui sont des listes de pointeurs sur fonctions, sont utilisés notamment pour la programmation événementielle.
Déffirences entre java et C#: Bien que le C# soit similaire à Java, il existe des différences notables, par exemple: - Java n'a pas de propriétés ni de surcharge d'opérateurs,
- Java n'a pas de mode unsafe permettant l'arithmétique de pointeurs,
- Java a des exceptions vérifiées, alors que les exceptions du C# ne sont pas vérifiées, comme en C++,
- Java permet la génération automatique de la documentation HTML à partir des fichiers sources à l'aide des descriptions Javadoc-syntax, tandis que le C# utilise des descriptions basées sur le XML,
- C# supporte indexers (indexeurs), delegates (délégué ou liste de pointeurs sur fonctions) et events (événements),
- C# supporte les structures en plus des classes (les structures sont des types valeur: on stocke le contenu et non l'adresse, elles peuvent contenir des méthodes),
- C# utilise une syntaxe intégrée au langage (DllImport) et portable pour appeler une bibliothèque native, tandis que Java utilise Java Native Interface.
http://www.wikipedia.org
|