Support de cours pour apprendre le C# .Net
...
Architecture .NET
Principes généraux
L’architecture .NET
La CLR (1)
– chargement et exécution contrôlé des programme
– isolation des programmes entre eux
– vérification de type lors des appels de fonctions
– conversion de code intermédiaire en code natif à l’exécution (JIT : Just In Time Compiler)
La CLR (2)
– accès aux infos sur le code (méta données)
– gestion de la mémoire
– sécurité
– compatibilité avec les DLL et modules COM
...
Compatibilité des langages .NET
C# par rapport à C++
– orientation objet plus importante
– code Unicode
– libération automatique d’objet (garbage collection)
– sur les tableaux ou les objets les pointeurs sont remplacés par des références
– passage par référence (et non adresse) des arguments
– ...
Éléments syntaxiques types de données tableaux opérateurs instructions
Premiers pas
Class Prog
{
static void Main()
{
/* code du programme principal */
}
}
Éléments syntaxiques
Types entiers (1)
Non conforme à la CLR = peut ne pas être compatible en cas d ’appel d ’un autre langage .NET
Types entiers (2)
Non conforme à la CLR = peut ne pas être compatible en cas d ’appel d ’un autre langage .NET
Types réels
Autres types
System.Boolean.
System.String
Déclarations et affectations
int i;
i = 5;
string s = "Bonjour";
double d = 1.23;
float f = 1.2f;
char c1 = 'A';
char c2 = '\n'; // Nouvelle ligne
char c3 = '\0' ; // caractère NULL
Type enum
enum Sexe {masculin, féminin}
….
Sexe s1 ;// s1 est une variable de type Sexe
s1 = Sexe.masculin;
if (s1 == Sexe.masculin) Console.Write("M");
// affiche M
s1++;
if ((int)s1 == 1) Console.Write("F"); // affiche F
Tableau à une dimension
int[] t; // référencé pas encore alloué
int[] t1, t2; // référencés pas encore alloués
t1 = new int [3]; // allocation
int[] t3 =new int[3]; //référencé et alloué
t2 = new int [] {5,3,1}; //allocation et initialisation
Console.Write(t2[0]); // affiche 5
Console.Write(t2.Length); // affiche 3
Array.Sort(t2); // tri le tableau
t2.CopyTo(t1,0); //copie t2 dans t1 depuis t2[0]
t3 = t2; // t3 et t2 référence le même tableau
t2[2] = 9; Console.Write(t3[2]); // affiche 9
Tableau à n dimensions
int[,] tn, tn1; // référencés pas encore alloués
tn1= new int [2,3]; // allocation
int [,] tn2 =new int[2,3]; //référencé et alloué
tn = new int [,] {{5,3,1}, {2,4,6}}; // initialisation
Console.Write(tn[1,0]); // affiche 2: col n°0, ligne n°1
Console.Write(tn.GetLength(0)); // affiche 2
tn1 = (int[,])tn.Clone(); //copie tn dans tn1
1 x++ x-- new …
2 un seul opérande + - ! ++x --x
3 multiplication – division * / %
4 addition – soustraction + -
5 décalage de bits << >>
6 relations < > >= <= is
7 égalité – inégalité = = ! =
8 ET binaire &
9 XOR binaire ^
10 OU binaire |
11 condition ET &&
12 condition OU ^^
13 condition ? :
14 assignations = *= /= += -= …..
Priorité des opérateurs
Opération entrée-sortie console
int i, j;
Console. WriteLine("Somme"); // affiche Somme
Console. Write ("Som"); // affiche Som
Console. WriteLine("me"); // complète Somme
i=1; j=2; Console.WriteLine("Somme = " + (i+j));
// affiche Somme = 3
i=1; j=2; Console.WriteLine("Somme = " + i+j);
// affiche Somme = 12
string s = Console.ReadLine();
i = Int32.Parse(s); Console.WriteLine(i+j);
Opérateurs (1)
( i=j++) équivaut à i=j; j=i+1;
( i=++j) équivaut à j=j+1; i=j;
Opérateurs (2)
Instruction if
{
une instruction ou plusieurs instructions;
}
else
{
une instruction ou plusieurs instructions;
}
Éléments de conditions
if (b) équivaut à if (b == true)
if (!b) équivaut à if (b == false)
a = b!=0 ? 1 : 2; équivaut à
if (b!=0) a=1 else a =2;
if (i==1 && j!=2 || k ==0)
signifie "si i vaut 1 et j différent de 2 ou k vaut 0"
Boucles
{instructions;}
{instructions;}
while (i<5);
for (int i=1;i<5;i++)
{instructions;}
for (int i=1, j = 10 ;i<5||j>10;i++,j--)
{instructions;}
Autres instructions
switch(variable)
{case valeur1: instructions; break;
case valeur2 : instructions; break;
default : instructions; break;}
Gestion d'erreur
int i , j =0 ;
try
{ i = 5/j;}
catch (Exception Err)
{MessageBox.Show(Err.Message);}
finally
{MessageBox.Show("Dans tous les cas");}
Les fonctions
Passage d'arguments
– Appel : int a = 3; f(a);
– Description : static void f(int i) {instructions;}
– Appel : int a = 3; f(ref a);
– Description : static void f(ref int i)
{instructions;}
– Appel : int[] ta = {1,2,3}; f(ta);
– Description : static void f(int [] ti) {instructions;}
Passage d'arguments variables
static void f(params int[] p)
{foreach (int a in p) Console.Write (a + " ");}
static void f(params object[] p)
{foreach (object a in p) {
if (a is int) Console.WriteLine ( "Entier : "+a);
if (a is double) Console.WriteLine ( "Réel : "+a);
if (a is string) Console.WriteLine ( "Chaine : "+a);}}
Applications Windows
Notions de base
Code généré par C#
Application.
Régions
#region Test
int i = 1;
#endregion
Quelques méthodes de base
Form2 f = new Form2() ; Form2.Show();
Form2 f = new Form2() ; Form2.ShowDialog();
Form2 f = new Form2() ; Form2.ShowDialog();
MessageBox.Show("Faire le choix", "Entête...",
MessageBoxButtons.YesNo);