New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
C sharp - Wikipédia

C sharp

Un article de Wikipédia, l'encyclopédie libre.

Pour les articles homonymes, voir Sharp. 

C#
Apparu en 2001 (dernière révision en 2005)
Auteur Microsoft Corporation
Paradigme structuré, imperatif, orienté objet
Typage statique, fort, nominatif
Dialectes 1.0, 1.5 , 2.0 (ECMA)
Influencé par Delphi, C++, Java, Eiffel
A influencé Nemerle, D, Java[1]
Implémentations .NET Framework, 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.

Il a été créé afin que la plate-forme .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.

Sommaire

[modifier] Plate-forme d'exécution

  • 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 supporté par Novell, ou dotGNU supporté 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 .NET ou libre comme Linux.

[modifier] Capacités du langage

Le C# est, d’une certaine manière, le langage de programmation qui reflète le mieux l’architecture .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 de très nombreuses améliorations 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 sortes de fonctions amies mélangées à des pointeurs de fonction, sont utilisés notamment pour la programmation évènementielle.

[modifier] Capacités introduites avec C# 2.0

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 :

  • Les classes partielles, permettant de répartir l’implémentation d’une classe sur plusieurs fichiers.
  • Les types génériques, qui ne sont pas une simple copie des templates C++. Par exemple, on trouvera dans les génériques C# la restriction de types (pour spécifier les types utilisables dans une généralisation). Par contre, il est impossible d’utiliser des expressions comme paramètres pour la généralisation.
  • Un nouvel itérateur qui permet l’utilisation de coroutines via le mot-clé yield, équivalent du yield que l’on trouve en Python.
  • Les méthodes anonymes avec des règles de fermeture configurables.
  • Les types « nullables », c'est-à-dire la possibilité de spécifier qu’un type de valeur peut être nul. Ceux-ci sont déclarés avec le caractère point d'interrogation « ? » suivant le nom du type, comme ceci : int? i = null;.
  • Le nouvel opérateur double point d'interrogation « ?? » utilise deux opérandes et retourne le premier non nul. Il a été introduit pour spécifier une valeur par défaut pour les types « nullables ».

À 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.

Anders Hejlsberg, le père du C#, 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)

[modifier] Capacités introduites dans C# 3.0

Le C# 3.0 fut présenté au salon PDC 2005. Les principales nouveautés dévoilées sont les suivantes :

  • L’ajout des mots-clefs 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).
  • Nouvelle possibilité d’instanciation complexe : À la place de Client c = new Client(); c.Nom = "Dupont";, on pourra utiliser Client c = new Client{ Nom = "Dupont" };
  • Expressions lambda : ListeTrucs.Where( delegate(Truc x) { return x.Size > 10; } ); devient ListeTrucs.Where( x => x.Size > 10 );
  • Inférence des variables locales : string s = "Dupont" peut être remplacé par var s = "Dupont"
  • Introduction des types anonymes : var x = new { Nom = "Dupont" } pourra ê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";
  • Méthodes étendues : on pourra ajouter des méthodes à une classe en y ajoutant un premier paramètre this.

Une présentation des futurs projets de Microsoft, notamment C# 3.0 et LINQ peut être trouvée sur la page MSDN Future Versions (en).

Les chercheurs de Microsoft ont précisé lors de la présentation de la future mouture de C# que le code compilé du 3.0 sera 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.

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

[modifier] Différences entre Java et le 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++,
  • C# a un goto control flow construct inexistant en Java,
  • 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 pointeur de fonction) 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.

[modifier] Standardisation

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

Les récentes modifications survenues dans la Version 2.0 ont été proposées par Microsoft aux comités de travail ECMA/ISO, mais la certification n'a toujours pas été obtenue.

[modifier] Compétition

Tous les ans, Microsoft France organise une compétition pour les étudiants programmeurs en C# : le Project Hoshimi.

[modifier] Le langage

Voici un exemple d'un programme Hello world typique, écrit en C# :

using System;

class HelloWorld
{
        public static void Main(string[] args)
        {
                Console.WriteLine("Hello World!");
        }
}

[modifier] Notes & références

  1. En Java 5.0, plusieurs fonctionalités (foreach, autoboxing, varargs, attributs and types énumérés) sont introduites (avec seulement des différences mineures de nom ou de syntaxe), après avoir été popularisées par C# language. [1][2][3]

[modifier] Liens externes

b:Accueil

Wikilivres propose un ouvrage abordant ce sujet : la programmation C#.

[modifier] Livres

  • (fr) Introduction à C# - Pierre-Yves Saumont, Antoine Mirecourt - 2001 - Éditions Eyrolles - ISBN 2-7464-0301-3
  • (fr) C# et .NET - Gérard Leblanc - 2002 - Éditions Eyrolles - ISBN 2-212-11066-9
  • (fr) C# et .NET Version 2 - Gérard Leblanc - 2006 - Éditions Eyrolles - ISBN 2-212-11778-7
  • (en) C# 2005 Programmer's Reference - Adrian Kingsley-Hughes, Kathie Kingsley-Hughes - 2006 - Édition Wrox - ISBN 0-470-04641-4
  • (en) Professional C#, 3rd Edition - Simon Robinson, Christian Nagel, Karli Watson, Jay Glynn, Morgan Skinner, Bill Evjen - 2004 - Édition Wrox - ISBN 0-7645-5759-9
  • (en) C# Essentials, 2nd Edition - Ben Albahari, Peter Drayton, Brad Merrill - 2002 - Édition O'Reilly Media - ISBN 0-5960-0315-3
Portail de l'informatique – Accédez aux articles de Wikipédia concernant l’informatique.

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu