Vous êtes sur la page 1sur 43

Développement .

Net

Pr. Fatimazahra BARRAMOU

Développement .Net 1

Développement .Net
Objectifs du cours

• Se familiariser avec le Framework .Net


• Apprendre le langage C#
• Réaliser des application Desktop
• Réussir la connexion à une base de données
SQL Server (ADO .Net)
• Etre en mesure d’élaborer une application
Web ASP .Net MVC

Développement .Net 2

1
Développement .Net
Qu’est ce que le .net Framework?

• Un nouvel environnement de développement


et d’exécution
• Microsoft annonce la première bêta du
Framework .NET n Juillet 2000
• Il comporte deux composants principaux:
– Common Language Runtime,
– Bibliothèque de classes .net framework.

Développement .Net 3

Développement .Net
Objectifs du .Net Framework

• Fournir un environnement cohérent de


programmation orientée objet
• Fournir un environnement d'exécution de
code qui minimise le déploiement de logiciel
et de conflits de versionning.
• Fournir un environnement d'exécution
robuste et sécurisé
• Permet l’intégration de l’éxistant

Développement .Net 4

2
Développement .Net
Caractéristiques du .NET Framework
• Gestion de la mémoire: gérer la durée de vie des
objets
• Système de type commun: les types de base sont
définis par NET Framework
• Bibliothèque de classes étendue
• Infrastructures et technologies de
développement: ASP.NET pour les applications
web, ADO.NET pour l'accès aux données et
Windows Communication Foundation pour les
applications orientées service.
Développement .Net 5

Développement .Net
Caractéristiques du .NET Framework
• Plateforme commune à 27 langages (VB, C#, VISUAL
F#, C++,…)
• Interopérabilité des langages. Les compilateurs de
langage qui ciblent le .NET Framework émettent un
code intermédiaire nommé Common Intermediate
Language (CIL) qui est compilé moment de
l'exécution par CLR
• Compatibilité des versions
• Exécution côte à côte: plusieurs versions
d'applications peuvent également coexister

Développement .Net 6

3
Développement .Net
Architecture .Net
Langages : C#, F#, VB.net, …
Visual Studio .Net

Commun Laguage Specification

Applications Application Application Services Cloud


Desktop Web (Mobile) Web Microsoft
WinForms ASP .Net MVC Winstore WCF Azure
WPF Web Forms
Console

ADO .NET et XML

Base Class Library

Common Language Runtime (Machine virtuelle)

Développement .Net 7

Développement .Net
Common Language Runtime (CLR)
• CLR est la base du .NET Framework
• CLR peut être considéré comme un agent qui:
– manage le code au moment de l'exécution,
– fournit des services essentiels,
– Assure la gestion du code: sécurisé et robuste
• Le code qui cible le runtime porte le nom de
code managé, tandis que le code qui ne cible
pas le runtime porte le nom de code non
managé.

Développement .Net 8

4
Développement .Net
Bibliothèque de classes .NET Framework

• La bibliothèque de classes .NET Framework est


une collection de types réutilisables qui
s'intègrent parfaitement au CLR
• La bibliothèque de classes est orientée objet

Développement .Net 9

Développement .Net
Common Language Specification (CLS)

• La spécification CLS permet d'optimiser et


d'assurer l'interopérabilité des langages en
définissant un ensemble de fonctionnalités sur
lequel les développeurs peuvent compter
dans de nombreux langages.
• La spécification CLS établit également des
exigences de conformité CLS ; ce qui permet
de déterminer si le code managé est conforme
à la spécification CLS

Développement .Net 10

5
Programmation .Net
1. Langage C#

Développement .Net 11

Langage C#
Plan

• Présentation générale de C#
• Syntaxe du langage (les fondamentaux)
• Les plus de C#
• TPs

Développement .Net 12

6
Langage C#
Présentation générale

• Nouveau langage de Microsoft


• Langage orienté objet
• Ressemble à C++
• Utilise les classes définies dans .NET
• Pas une partie de .NET, langage comme un
autre
• Permet d’utiliser les concepts de .NET

Développement .Net 13

Langage C#
Notion de classe

Une classe décrit un ensemble d’objets qui ont:


Les mêmes types de données (nom, type, valeur
de base)
Les même types de traitements (nom,
paramètres)

Une classe définit comment les objets doivent


être construits et comment ils doivent se
comporter.

Développement .Net 14

7
Langage C#
Notion de classe
[access] [sealed | abstract] class NomClasse [: Classe, Interface(s)]
{
[définition de la classe]
}
Exemple:
class Personne
{
private string nom;
private string prenom;
public Personne(string n, string p)
{
nom = n;
prenom = p;
}
}
Développement .Net 15

Langage C#
la classe Object
• La classe Object est la classe de base ultime de toutes
les classes du .NET Framework.
• Toutes les classes du .NET Framework héritent
directement ou indirectement de la classe Object.

Développement .Net 16

8
Langage C#
Notion de méthode
• Une méthode est un bloc de code contenant une série
d'instructions.
• Une méthode définit les actions ou opérations soutenues
par une classe.
• Une méthode est définie en spécifiant le niveau d'accès, le
type de retour, le nom de la méthode, et une liste
optionnelle de paramètres entre parenthèses, suivie par
un bloc de code entre accolades.
public void Identifie()
{
Console.WriteLine("{0} {1}", nom, prenom);
}

Développement .Net 17

Langage C#
Notion de constructeurs
• Les constructeurs sont des méthodes spéciales de classe
qui sont exécutées quand une nouvelle instance d'une
classe est créée.
• Les constructeurs sont utilisés pour initialiser les attributs
de l'objet.
• Les constructeurs doivent avoir exactement le même nom
que la classe, et ils ne disposent pas d'un type de retour.
• On peut définir plusieurs constructeurs d’une classe
(chacun avec une signature unique)

Développement .Net 18

9
Langage C#
Notion de constructeurs
Exemple:
class Personne
{
private string nom;
private string prenom;

public Personne(string n, string p)


{
nom = n;
prenom = p;
}
}

Développement .Net 19

Langage C#
Notion d’objets
• On utilise la classe d’objet qui définit la façon dont les
objets devraient être construits.
• Tous les objets créés à partir de la même classe
ressemblent et se comportent d'une manière similaire.

static void Main(string[] args)


{
Personne p = new Personne("bakali", "ahmed");
p.Identifie();
Console.ReadKey();
}

Développement .Net 20

10
Langage C#
Notion de visibilité
• L'encapsulation consiste à rendre les membres d'un
objet plus ou moins visibles pour les autres objets.
• L'encapsulation est un mécanisme consistant à
rassembler les données et les méthodes au sein d'une
structure en cachant l'implémentation de l'objet
Accessibilité Description
public Accessible à tous
private Accessible seulement aux objets de la classe elle-même
protected Accessible seulement aux objets dérivés de la classe
internal Accessible à l'assembly en cours.
Protected internal l'assembly en cours ou aux objets dérivés de la classe

Développement .Net 21

Langage C#
Notion de propriété
• Une propriété est un membre qui fournit un
mécanisme flexible pour la lecture, l'écriture ou le
calcul de la valeur d'un champ privé.
• C’est une méthodes d'instance spéciale s'appuyant
sur les accesseurs get/set pour accéder à l'état de
l'objet
• Objectifs :
– Respecter une encapsulation forte ( tous les champs
restent privés)
– Mettre en place un mécanisme d'accès souple 'simulant'
un accès direct aux champs
Développement .Net 22

11
Langage C#
Notion de propriété

Exemple:

class Personne
{
private string nom;
private string prenom;
private int age;

public int Age


{
get { return age; }
set { if (value > 0) age = value; }
}
}

Développement .Net 23

Langage C#

TP

Développement .Net 24

12
Langage C#
Notion d’héritage
• L'héritage est un mécanisme de transmission des
caractéristiques d'une classe (ses attributs et méthodes)
vers une sous-classe.
• La classe dérivée contient les attributs et les méthodes
de sa superclasse
public class Mere {
.....
}

public class Fille : Mere {


.....
}
Développement .Net 25

Langage C#
Notion d’héritage

Développement .Net 26

13
Langage C#
Notion d’héritage: les classes abstraites
• Les classes abstraites fournissent une définition
commune d'une classe de base qui peut être
partagée par plusieurs classes dérivées.
• La classe abstraite fournit souvent une
implémentation incomplète.
• Pour instancier une classe abstraite, il faut
hériter d’elle et terminer son implémentation.

Développement .Net 27

Langage C#
Notion d’héritage: les classes abstraites

Développement .Net 28

14
Langage C#
Notion d’héritage: les classes sealed
• Le mot clé sealed permet d'empêcher l'héritage d'une classe ou
de certains membres de la classe
• Une classe sealed ne peut pas être utilisée comme une classe de
base.

Développement .Net 29

Langage C#
Notion de polymorphisme
• Le polymorphisme représente la faculté d'une
méthode à pouvoir s'appliquer à des objets de
classes différentes
• Permet d'effectuer une action sélectionnée
contextuellement en fonction de la classe d'objets
à laquelle elle s'applique
• Le couple virtual/override permet d’appeler la
méthode de substitution adéquate à partir d'une
référence de base pointant vers des objets de type
classe dérivée

Développement .Net 30

15
Langage C#
Notion de polymorphisme
• Exemple:
public class Shape
{
public virtual void Draw()
{ Console.WriteLine("Performing base class drawing
tasks");}
}

class Circle : Shape


{
public override void Draw()
{ Console.WriteLine("Drawing a circle");
base.Draw(); }
}
class Rectangle : Shape
{
public override void Draw()
{ Console.WriteLine("Drawing a rectangle");
base.Draw(); }
}
Développement .Net 31

Langage C#
La surcharge
• Objectif: créer des méthodes qui ont la même
fonctionnalité mais qui acceptent des paramètres
différents
• Les méthodes de surchage (overload) ont le même
nom
• Chaque méthode a une signature unique qui la
différencie des autres méthodes
• La signature de la méthode comprend le nom de
la méthode et la liste des paramètres (mais pas le
type de retour)

Développement .Net 32

16
Langage C#
La surcharge
• Exemple:

class Triangle : Shape


{
void StopService()
{ ... }
void StopService(string serviceName)
{ ... }
void StopService(int serviceId)
{ ... }

Développement .Net 33

Langage C#
Paramètres optionnels
• Les paramètres optionnels permettent d'omettre
des arguments pour certains paramètres
• Dans la signature de la méthode, les paramètres
optionnels doivent être cités après les paramètres
obligatoires

void StopService(bool forceStop, string serviceName =


null, int serviceId = 1)
{ ... }

Développement .Net 34

17
Langage C#
Paramètres optionnels
• Appel de méthode en spécifiant les paramètres
obligatoires:
var forceStop = true;
StopService(forceStop);

• Appel de méthode en spécifiant les paramètres


obligatoires et optionnels:
var forceStop = true;
var serviceName =
"FourthCoffee.SalesService";
StopService(forceStop, serviceName);

Développement .Net 35

Langage C#
Paramètres nommés
• Permettent de spécifier un argument pour un
paramètre particulier en l'associant au nom du
paramètre, et non pas à la position du paramètre
dans la liste de paramètres.
• Permettent d’éviter d'avoir à mémoriser ou à
rechercher l'ordre des paramètres dans les listes
de paramètres des méthodes appelées
• Appel de méthode en utilisant un paramètre
nommé:

StopService(true, serviceID: 1);

Développement .Net 36

18
Langage C#
Paramètres Output
• Une méthode peut retourner une valeur en
utilisant le return, mais si on a besoin de retourner
plusieurs valeurs
Paramètre output

• Une méthode peut avoir plusieurs paramètres


output
• Pour définir un paramètre output, il faut utiliser le
préfixe out devant le paramètre dans la signature
de la méthode

Développement .Net 37

Langage C#
Paramètres Output
• Méthode avec paramètre output:
bool IsServiceOnline(string serviceName, out string statusMessage)
{
var isOnline = CoffeeServices.GetStatus(serviceName);
if (isOnline)
{ statusMessage = "Services is currently running."; }
else
{ statusMessage = "Services is currently stopped."; }
return isOnline;
}

• Récupérer la valeur du paramètre output:


var statusMessage = string.Empty;
var isServiceOnline = IsServiceOnline("Coffee.SalesService", out
statusMessage);

Développement .Net 38

19
Langage C#
Syntaxe du C# : Le mot clé this
• Le mot-clé this est une référence à l'instance actuelle de
la classe.

Développement .Net 39

Langage C#
Syntaxe du C# : Le mot clé static

• Le mot-clé static est utilisé pour déclarer les


membres qui ne font pas partie des objets
individuels, mais à une classe elle-même.
• Un membre statique garde une valeur unique et
partagée par toutes les instances de la classe
• Un membre statique ne peut pas être référencé
par un objet d'instance. Au lieu de cela, un
membre statique est référencé par le nom de la
classe.
Développement .Net 40

20
Langage C#
Syntaxe du C# : Le mot clé static

Développement .Net 41

Langage C#

TP

Développement .Net 42

21
Langage C#
Principales instructions :
if
while
do
for
switch
Foreach

Développement .Net 43

Langage C#
Principales instructions :
Instruction if

public int Test(int a, int b)


{
if (a > b)
return 1;
else if (a < b)
return 1;
else return 0;
}

Développement .Net 44

22
Langage C#
Principales instructions :
Switch
public int Test(string label)
{
int result;

switch(label)
{
case null :result = 1; break;
case "medium": goto case "small";
case "large":
case "small":
result = 2; break;
default:
result = 0; break;
}
return result;
}

Développement .Net 45

Langage C#
Principales instructions :
While (boucle selon une expression booléenne)

int i = 0;
while (i < 5) int i = 0;
{ do
..... {
i++; .....
} i++;
}
while(true) while (i < 5);
{
.....
}

Développement .Net 46

23
Langage C#
Principales instructions :
For
// for(initialisation, condition, step)

for(int i=0; i<5; i++)


{
.....
}

Développement .Net 47

Langage C#
Principales instructions :
Foreach
Permet de parcourir un tableau, une collection
(list,queue,…)

int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 };


foreach (int element in fibarray)
{
System.Console.WriteLine(element);
}

Développement .Net 48

24
Langage C#
Opérateurs

Type Opérateur
Arithmétique +, -, *, /, %
Incrémentation ++, --
Comparaison ==, !=, <, >, <=, >=, is
Concaténation String +
Logique &, |, &&, ||
Indexing []
Casting ( ), as
Affectation =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,
>>=, ??

Développement .Net 49

Langage C#
Opération entrée-sortie console

int i, j;
i=1; j=2;
Console. WriteLine("Somme"); // affiche Somme
Console.WriteLine("Somme = " + (i+j)); // affiche Somme = 3
string s = Console.ReadLine();

Développement .Net 50

25
Langage C#
Variables: Principaux types prédéfinis
Type Description Exemple

object Type de base fondamental de tous les autres types. object o = null;
string Type chaîne ; string s = "hello";
short Type intégral signé 16 bits short val = 12;
int Type intégral signé 32 bits int val = 12;
long Type intégral signé 64 bits long val1 = 12;
long val2 = 34L;
float Type virgule flottante à simple précision float val = 1.23F;
double Type virgule flottante à double précision double val1 = 1.23;
double val2 = 4.56D;
bool Type Boolean ; une valeur bool est true ou false bool val1 = true;
bool val2 = false;
char Type caractère ; char val = 'h';
decimal Type décimal de précision avec 28 chiffres decimal val = 1.23M;
significatifs Développement .Net 51

Langage C#
Variables: Déclaration et affectation

• Déclaration de variable:
// DataType variableName; // DataType variableName1, variableName2;
Ou int price, tax;
int price;

• Affectation de variable:
// variableName = value;
price = 10;

• Déclaration et Affectation de variable:


int price = 10;

Développement .Net 52

26
Langage C#
Variables: Déclaration et affectation

Variable d’objet:
• Création d’une instance de classe
ServiceConfiguration config = new ServiceConfiguration();

• Accès aux membres de la classe


– Appel de méthode:
config.LoadConfiguration();
– Récupérer la valeur d’une propriété:
var applicationName = config.ApplicationName();
– Modifier la valeur d’une propriété:
config.DatabaseServerName = "78.45.81.23";

Développement .Net 53

Langage C#
Variables: Conversion de types
Conversion implicite:
– Fonctionne automatiquement et sans risque d’échec
– Pas de perte de précision/d’information
– En C #, on peut faire le cast d’un objet à l'un de ses types de base.
• Affectation d'un objet de classe dérivée à un objet de classe de
base ne nécessite pas de syntaxe particulière:

• Exemples:
– Int x = 123456;
– Long y = x; // implicite

Développement .Net 54

27
Langage C#
Variables : Conversion de types
Conversion implicite:
• Le tableau suivant montre les conversions implicites supportées
par C#

De A
short int, long, float, double, decimal
int long, float, double, decimal
long float, double, decimal
float double
char int, long, float, double,decimal

Développement .Net 55

Langage C#
Variables : Conversion de types
Conversion explicite:
– Nécessite un cast
– Peut être refusé
– De l’information/précision peut être perdue
• Affectation d'un objet de classe de base à un objet de la classe
dérivée doit être fait explicitement:

• Au moment de l'exécution, si la valeur de o n’est pas compatible


avec la classe Rectangle, le runtime renvoie une
System.InvalidCastException

Développement .Net 56

28
Langage C#
Variables : Conversion de types
Conversion explicite:
• Exemples:
– double d = 1,235689;
– float f = (flaot)d; //explicite
• Le cast ne peut pas être utilisé si le format de donnée doit être
changé (ex: conversion de string à integer)

Utilisation de la méthode System.Convert

Développement .Net 57

Langage C#
Variables : Conversion de types
Conversion par System.Convert:
– string possibleInt = "1234";
– int count = Convert.ToInt32(possibleInt);
Conversion par TryParse:
int number = 0;
string numberString = "1234";
if (int.TryParse(numberString, out number))
{
// Conversion succeeded, number now equals 1234.
}
else
{
// Conversion failed, number now equals 0.
}

Développement .Net 58

29
Langage C#
Variables : L’opérateur is
• Pour éviter les erreurs d'exécution de conversion, comme le
InvalidCastException, l'opérateur is peut être utilisé pour vérifier
si le cast est autorisée avant de l'effectuer.

• Ici, le runtime vérifie la valeur de l'objet o. Le cast est exécuté


uniquement si o contient un objet Rectangle.

Développement .Net 59

Langage C#
Variables : L’opérateur as
• L'opérateur as est similaire à l'opération cast, mais dans le cas ou
la conversion de type n’est pas possible, null est renvoyé au lieu
de lever une exception.

• Lors de l'exécution, si ce n’est pas possible de convertir la valeur


de la variable o à un rectangle, une valeur de null est affectée à la
variable r. Aucune exception ne sera soulevé,

Développement .Net 60

30
Langage C#
Variables : String
• La concaténation de string peut se faire par:
– L’utilisation de l’opérateur +: mauvais codage puisque à
chaque concaténation, une nouvelle variable string est crée
en mémoire.

– L’utilisation de la classe StringBuilder:


StringBuilder address = new StringBuilder();
address.Append("23");
address.Append(", Main Street");
address.Append(", Buffalo");
string concatenatedAddress = address.ToString();

Développement .Net 61

Langage C#

TP

Développement .Net 62

31
Langage C#
Variables : Array
• Array est un ensemble d'objets qui sont regroupés
ensemble et gérés comme une unité.
• C# suuporte:
– Array à une dimension (liste)
– Aray à deux dimensions (tableau)
– Array à plusieurs dimensions
• Array d’un type (objet) particulier ne peut contenir que
les éléments de ce type (pour la manipulation d’objets
différents, il faut utiliser les collections)
datatype[] arrayName;

Développement .Net 63

Langage C#
Variables : Array
• Déclaration de Array de type int :
int[] arrayName;
• Initialisation de Array de type int :
int[] arrayName = new int[5];
• Affectation des valeurs:
arrayName [0] = 8;
• Affectation des valeurs avec la declaration!

int[] arrayName = new int[5] {8,2,1,8,7};

int[] arrayName = {8,2,1,8,7};

Développement .Net 64

32
Langage C#
Variables : Array
• Accès aux données d’un Array:
– Accès par index:

int[] oldNumbers = { 1, 2, 3, 4, 5 };
int number = oldNumbers[2];

– Accès par iteration d’un array:


int[] oldNumbers = { 1, 2, 3, 4, 5 };
for (int i = 0; i<oldNumbers.Length; i++)
{ int number = oldNumbers[i]; }

• Array peut être multi-dimentionnel


int[,,] arrayName = new int[10, 10, 10];

Développement .Net 65

Langage C#
Variables: enum
• Un type énumération (enum) permet de créer une variable avec
un ensemble fixe de valeurs possibles.
enum enum_name {enumeration list};

• Déclaration d’une énumération:


enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday,
Saturday};

• Utilisation d’une énumération :


// Set an enum variable by name.
Day favoriteDay = Day.Friday;
// Set an enum variable by value.
Day favoriteDay = (Day)4;

Développement .Net 66

33
Langage C#
List
• Représente une class Personne
{ public string Name { get; set; }
liste fortement public int Id { get; set; }
typée d'objets static void Main(string[] args)
accessibles par { List<Personne> personneListe = new
List<Personne>
index. { new Personne
• Fournit des {
Id=123,
méthodes de Name= "Ali"
recherche, de tri },
et de new Pesonne
{
manipulation de Id=554,
listes. Name= "Ahmed"
}
};
}
}

Développement .Net 67

Langage C#
List
• List[index]: obtenir l’élément de l’index spécifié
• List.Add : ajouter un élément à la liste
• List.Contains : retourne True si la liste contient l’élément
spécifié
• List.Clear : supprime tous les éléments de la liste
• List.Find : retourne l’élément recherché
• List.ForEach : exécute l’instruction pour chaque élément de la
liste
• List.Remove : supprime l‘élément spécifié de la liste
• …

Développement .Net 68

34
Langage C#
Classification des variables
• Variable de type valeur:
– La variable contient la valeur de la donnée
– Les types prédéfinis, les structures et les enum sont
de type valeur. Ex: int mavariable=100;
• Variable de type référence
– La variable de type référence stocke une référence
aux données
– Une référence établit "un lien" vers l’objet visé
– une référence n'est pas obligatoirement l'adresse de
l'objet référencé – cependant les concepteurs du C#
ont opté pour cette option technologique
– Exceptés les cas plus hauts (variables), tout le reste
est référence
Développement .Net 69

Langage C#
Classification des variables
• Illustration valeur vs référence

• Y est de type « valeur »: le contenu de


la variable reflète sa valeur
• X est de type « référence »: le
contenu de la variable contient un
lien vers la donnée situé ailleurs en
mémoire

Développement .Net 70

35
Langage C#
Structures
• Mot-clé struct
• Objets de type valeur
• Déclaration des mêmes types de membres qu’une
classe possible
• Pas d’héritage possible
• Peut implémenter des interfaces

Développement .Net 71

Langage C#
Structures
• Déclaration de structure:
public struct Coffee
{
public int Strength;
public string Bean;
public string CountryOfOrigin;
// Other methods, fields, properties, and events.
}

• Instanciation:
Coffee coffee1 = new Coffee(); // constructeur par défaut
coffee1.Strength = 3;
coffee1.Bean = "Arabica";
coffee1.CountryOfOrigin = "Kenya";

Développement .Net 72

36
Langage C#
Différence entre Structures et classes

• Les structs sont des types valeur


• Tous les types struct héritent implicitement de la
classe System.ValueType
• La valeur par défaut d'un struct est la valeur obtenue
en mettant tous les champs de type valeur à leur
valeur par défaut et tous les champs de type référence
à null
• Un type struct n'a pas le droit de déclarer un
constructeur d'instance sans paramètre
• Un struct n'a pas le droit de déclarer un destructeur

Développement .Net 73

Langage C#

TP

Développement .Net 74

37
Langage C#
Les indexeurs

• Les indexeurs permettent aux instances d'une classe ou


d'un struct d'être indexés comme des tableaux
• Permettent d’accéder aux éléments d’une pile sans
dépiler les éléments
• Utilisation du mot clés « this » pour déclarer un indexeur
• Utilisation des accesseur get et set:
public int this[int index] // Indexer declaration
{
// get and set accessors
}

Développement .Net 75

Langage C#
Les indexeurs
Exemple:
– Création de structure qui inclut un indexeur:
public struct Menu
{
public string[] boissons;
public Menu()
{ boissons = new string[]; }
// This is the indexer.
public string this[int index]
{
get { if(index>=0 && index<boissons.Length)
{ return this.boissons[index]; }
else return "error"; }
set { if (index >= 0 && index < boissons.Length)
{ this.boissons[index] = value; } }
}
}
Développement .Net 76

38
Langage C#
Les indexeurs
Exemple:
Accès aux valeur du tableau en utilisant l’indexeur:
static void Main(string[] args)
{// Create new instance and assign elements in the array through the indexer.
Menu menu1 = new Menu(4);
menu1[0] = "Americano";
menu1[1] = "Espresso";
menu1[2] = "Cappuccino";
menu1[3] = "Café au Lait";

// Read elements through the indexer.


string value1 = menu1[1];
string value2 = menu1[3];

// Write the results.


Console.WriteLine(value1);
Console.WriteLine(value2);
}

Développement .Net 77

Langage C#
Type Delegate
• le type delegate est un type référence qui peut être utilisé
pour encapsuler une méthode nommée ou anonyme
• C’est un type "pointeur sur une fonction"
• C’est une variable qui contient une fonction
• Un délégué peut pointer sur plusieurs fonctions (multicast).
• Déclaration de delegate:
delegate int unDelegue (int x, int y);

• Instanciation de delegate:
unDelegue delg = new unDelegue(addition);

Ou

unDelegue delg = addition;

Développement .Net 78

39
Langage C#
Type Delegate
Exemple:
delegate int monDelegue(int x);
class Program
{
public static int incremente (int a)
{ return ++a; }

public static int decremente(int a)


{ return --a; }

static void afficher (int a, monDelegue delg)


{ Console.WriteLine(delg(a)); }

static void Main(string[] args)


{
afficher(5, incremente);
afficher(1, decremente);
Console.ReadKey();
}
} Développement .Net 79

Langage C#
Expression Lambda
• Une expression lambda est une fonction anonyme
utilisée pour créer des types délégués .
• Une expression lambda comprend :
– Des paramètres
– Le signe =>
– Une expression résultat.
• Quelques expressions :
( n) => n%2
( a, b) => a+b
• Les expressions lambda sont particulièrement utiles pour
écrire des expressions de requête LINQ.

Développement .Net 80

40
Langage C#
Expression Lambda
• Exemple:
delegate int del(int i);
static void Main(string[] args)
{
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
Console.WriteLine(j);
Console.ReadKey();
}

Développement .Net 81

Langage C#
Exception
• Une exception est une instance de la classe System.exception
ou d’une classe dérivée
– Contient des information à propos de l’exception
– Propriétés:
• Message (le message associé à l’exception)
• StackTrace (la pile d’appel des méthodes)
• InnerException (en cas d’exception imbriquée)

Développement .Net 82

41
Langage C#
Exception
Try …. Catch …. Finally

• Try: permet de lever une exception


• Catch: permet de traiter les exceptions
Il est possible d’avoir plusieurs block catch pour différentes exceptions à
traiter
• Finally : contient le code qui doit etre toujours éxecuté, qu’il y
ait une exception ou pas
Il n’est pas possible de sortir d’un block finally par un saut (ex goto)

Développement .Net 83

Langage C#
Exception
• Exemple: Il est possible de relever la même exception ou de la capturer
(bloc catch) pour en lever une autre
Try
{ Console.WriteLine("try");
throw new Exception("message");
}
catch(ArgumentNullException e)
{
Console.WriteLine("caught null exception");
}
catch
{
Console.WriteLine("catch");
}
finally
{
Console.WriteLine("finally");
}

Développement .Net 84

42
Langage C#

TP

Développement .Net 85

43

Vous aimerez peut-être aussi