Présentation de C#
C'est un langage proposé par Microsoft, orienté objet, dont la syntaxe est très proche de C (et donc de Java). Nous n'allons donc pas en détailler la syntaxe mais plutôt nous attarder sur sa mise en oeuvre des grands concepts de la programmation objet. Dans ce chapitre nous commençons par aborder les éléments originaux du langage
Commençons à écrire un premier programme, le classique "bonjour":
public class Bonjour{
static void Main(){
System.Console.WriteLine("bonjour");
}
}
En utilisant Textpad, enregistrer le fichier sous le nom : prg1.cs
En C#, presque tout est classe, donc ici nous déclarons une classe nommée Bonjour.
Quelques commentaires.
Lorsqu'on lance le fichier compilé s'exécutera, le point d'entré
sera la fonction Main de la classe. Notez le M majuscule
La première ligne public class Bonjour déclare
un classe nommée Bonjour, le mot public est un indicateur de visibilité
- déjà vu -
Cette classe sera donc accessible à
toutes les classes - nous préciserons cette notion plus tard -
static void Main() déclare une fonction Main à l'intérieur
de la classe.
Le mot static indique que la méthode est une méthode à
"portée classe", aucun objet de type Bonjour ne
pourra l'appeler.
Le corps de la fonction Main contient l'appel de la méthode WriteLine
appliquée à la classe Console (méthode statique -à
portée classe-). System est une bibliothèque de classe;
C# utilise le terme de namespace ou espace de nommage et regroupe
des classes de même fonctionalité. La méthode Write
ne provoque pas de passage à la ligne.
Les méthodes n'ont pas de prototype - comme en C/C++ - Le corps de celles-ci
est immédiatement écrit dans la classe.
Le langage respecte la casse des caractères. Pour nommer les classes
nous adopterons la convention proposée par Microsoft.
Règles de
nommage.
Les classes ont un nom qui commence par une majuscule (notation Pascal) ex : classes Bonjour, Client, Facture; une majuscule est utilisée pour chaque mot nouveau, ex : ClientPrivilegie, AppFacture.
Les attributs et méthodes suivent la même règle : NomClient, Adresse, GetNom( ), ValSolde( ).
Par contre les paramètres et variables utilisent la notation Camel : indice, cumul, cumulTotal.
Notion de namespace.
Toutes les classes du framework .Net sont organisées dans des espaces de noms -namespaces- correspondant à des regroupements fonctionnels : SystemIO, System.Data, System.Collections
L'instruction using <nom du namespace> permet d'accéder à ses classes
Par exemple, comme le namespace System contient le classe Console on pouvait écrire :
using System;
public class Bonjour{
public static void Main(){
Console.WriteLine("bonjour");
}
}
On peut déclarer ses propres namespaces :
using System;
namespace MonNamespace{
public class Bonjour{
public
static void Main(){
Console.WriteLine("bonjour");
}
}
}
Types de base.
Un grand nombre de types de base est disponible :
Type C#
|
format
|
Valeurs possibles
|
bool | false, true | |
byte | un octet non signé | 0, 233, |
sbyte | un octet de -128 à 257 | -23, |
char | deux octets, caractère unicode | 's', 'Z' |
decimal | signé, 128 bits | -0.023, 12.56 |
float | 32 bits | -0.13, 45.89 |
double | 64 bits | -456.56, 789.45 |
long | entier signé, 64 bits | -12345654654 |
int | entier signé, 32 bits | -1321313 |
short | entier signé, 16 bits | -31456 |
string | chaîne de caractères | "toto" |
Le type string est un peu à part, nous l'étudierons un peu plus tard.
Conversion de type.
Il est utile parfois de convertir une variable d'un type donné en un autre type. Il existe deux modes de conversion :
Conversion implicite.
Ceci est effectué automatiquement lorsqu'il y a une conformité de type : le type modifié a une plage de valeurs comprise dans le type qui reçoit la valeur convertie.
float f = 12.456;
double d ;
d = f ; ne pose pas de problème puisque la plage de valeur de d contient la plage de valeurs de f.
De même un int peut être converti en long, etc...
Par contre la conversion inverse ne peut se faire ainsi; il faudra faire appel à une conversion explicite.
Conversion explicite
Dans ce cas il faudra utiliser un opérateur de conversion explicite -opérateur de cast- :
long l = 12345;
int n;
n = (int) l;
Console.WriteLine(n);
L'opérateur de conversion est de la forme (<type>)valeur : la variable valeur est convertie dans le type indiqué
Attention car ce type de conversion peut entrainer une altération du résultat si la valeur à convertir dépasse la plage de valeur du type concerné, ainsi
long l=123453253221;
int n;
n=(int)l;
Console.WriteLine(n);
entraîne une perte de valeur pour n.
la
classe Convert
Cette classe propose des méthodes statiques de conversion :
Convert.ToBoolean
Convert.ToInt16,
ConvertToInt32, ConvertToInt64 convertit en entier de format indiqué
Convert.ToSingle
convertit en float
Convert.ToChar
etc...
Exemple :
string s ="2003";
int n = ConvertToInt16 (s);
n++; // n vaut maintenant 2004
Attention car des conversions peuvent être impossibles, le compilateur génèrera alors une erreur
Les instructions
d'entrée/sortie
La classe Console -du namespace System- permet d'effectuer les entrées/sorties. Les méthodes utilisées sont statiques et ne nécessitent donc pas de création d'objet de la classe Console
L'affichage
Console.Write pour un affichage, Console.WriteLine pour un affichage suivi d'un saut de ligne.
Affichage d'une chaîne constante : Console.WriteLine("Bonjour toto");
Affichage d'une variable : Console.WriteLine(n);
Affichage mixte : Console.WriteLine("Bonjour {0}, vous avez {1} ans",nom, age);
Les variables figurent dans la chaîne constante sous la forme {indice de variable}; les variables sont ensuite passées en paramètre à la suite, la virgule servant de séparateur. Les indices commencent à 0.
La
saisie.
La classe Console propose une méthode principale ReadLine() qui retourne une chaîne. Pour utiliser ReadLine, il faudra utiliser la classe Convert :
int n ;
string s;
s = Console.ReadLine();
n = Convert.ToInt16(s);
Ou plus rapidement :
n = Convert.ToInt16(Console.ReadLine());
Les chaînes
de caractères.
Le type string assimile une chaîne à un tableau de caractère dont chaque caractère peut être accédée en lecture par
string ch = "Bonjour Toto";
char car = ch[2]; //car
contient la lettre d'indice 2 soit n, les indices commencent à
0
Le type string fournit un certain nombre de méthodes (même si ce n'est pas une classe)
longueur d'une chaîne : ch.Length retourne la longueur réelle
de la chaîne contenue dans ch
conversion de la casse : ch.ToLower() bascule en minuscule, ch.ToUpper()
bascule en majuscule la chaîne
ch. Notez que la chaîne n'est pas modifiée, il s'agit d'une fonction
de bascule.
suppression des espaces : la fonction ch.Trim() enlève les espaces
à droite et à gauche.
A noter que C# propose une véritable classe String (notez la majuscule) qui fournit une plus grande gamme de services.