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.