c#marc.chevaldonne.free.fr/ens_rech/csharp_xml_gi_2011_2012_files/cours1.pdf · bases du c#...

37
C# .NET Marc Chevaldonné [email protected] http://marc.chevaldonne.free.fr Année scolaire 2011 - 2012 1 lundi 5 septembre 2011

Upload: others

Post on 28-Mar-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

C# .NET

Marc Chevaldonné[email protected]://marc.chevaldonne.free.fr

Année scolaire 2011 - 2012

1

lundi 5 septembre 2011

Page 2: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Bases du C#syntaxe, types

• 1er programme en C# (➠ exemple 1)• tout est objet

• Syntaxe• proche du C++ et Java, en plus verbeuse (plus de

modificateurs)• Les types : environ C++ (➠ exemple 2)

• suffixes (f pour float, L pour long, m pour decimal)• string• decimal• valeurs par défaut

2

lundi 5 septembre 2011

Page 3: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Bases du C#tableaux

• Les tableaux (cf. exemple 3)• syntaxe• accès aux cellules et dépassement• tableau d’object• propriété Length• copie de tableaux

• Clone• CopyTo

3

lundi 5 septembre 2011

Page 4: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Bases du C#types

• Les types 2 : types valeurs et types références• Stack and Heap• Reference counting• Value vs Reference • value type vs reference types

4

lundi 5 septembre 2011

Page 5: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Bases du C#Gestion de la mémoire : Stack vs Heap

static void Main(){

int i=3;

{

float temp = 23.0f;

temp /= i;

}

{

MyClass c = new MaClass();}

}

... 54 55 56 57 58 59 60 61 62 ...

... ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 23.0f23.0f23.0f23.0f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 7.6667f7.6667f7.6667f7.6667f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 adresseadresseadresseadresse ...

HeapStack

5

lundi 5 septembre 2011

Page 6: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : Stack vs Heap

static void Main(){

int i=3;

{

float temp = 23.0f;

temp /= i;

}

{

MyClass c = new MaClass();}

}

... 54 55 56 57 58 59 60 61 62 ...

... ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 23.0f23.0f23.0f23.0f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 7.6667f7.6667f7.6667f7.6667f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 adresseadresseadresseadresse ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

Stack

?

6

lundi 5 septembre 2011

Page 7: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : Stack vs Heap

static void Main(){

int i=3;

{

float temp = 23.0f;

temp /= i;

}

{

MyClass c = new MaClass();}

}

... 54 55 56 57 58 59 60 61 62 ...

... ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 23.0f23.0f23.0f23.0f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 7.6667f7.6667f7.6667f7.6667f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 adresseadresseadresseadresse ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

Stack

?

7

lundi 5 septembre 2011

Page 8: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : Stack vs Heap

static void Main(){

int i=3;

{

float temp = 23.0f;

temp /= i;

}

{

MyClass c = new MaClass();}

}

... 54 55 56 57 58 59 60 61 62 ...

... ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 23.0f23.0f23.0f23.0f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 7.6667f7.6667f7.6667f7.6667f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 adresseadresseadresseadresse ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

Stack

?

En C++, vous êtes

responsables de

l’allocation et de la

désallocation de la

mémoire sur le tas

8

lundi 5 septembre 2011

Page 9: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : Stack vs Heap

static void Main(){

int i=3;

{

float temp = 23.0f;

temp /= i;

}

{

MyClass c = new MaClass();}

}

... 54 55 56 57 58 59 60 61 62 ...

... ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 23.0f23.0f23.0f23.0f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 7.6667f7.6667f7.6667f7.6667f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 adresseadresseadresseadresse ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

Stack

?

En C#, les références des

objets alloués sur le tas

sont comptées et le

garbage collector

s’occupe de la

désallocation

9

lundi 5 septembre 2011

Page 10: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Bases du C#Gestion de la mémoire : Stack vs Heap

static void Main(){

int i=3;

{

float temp = 23.0f;

temp /= i;

}

{

MyClass c = new MaClass();}

}

... 54 55 56 57 58 59 60 61 62 ...

... ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 23.0f23.0f23.0f23.0f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 7.6667f7.6667f7.6667f7.6667f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 adresseadresseadresseadresse ...

HeapStack

1

10

lundi 5 septembre 2011

Page 11: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : Stack vs Heap

static void Main(){

int i=3;

{

float temp = 23.0f;

temp /= i;

}

{

MyClass c = new MaClass();}

}

... 54 55 56 57 58 59 60 61 62 ...

... ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 23.0f23.0f23.0f23.0f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 7.6667f7.6667f7.6667f7.6667f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 adresseadresseadresseadresse ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

Stack

0

GC

11

lundi 5 septembre 2011

Page 12: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : Stack vs Heap

static void Main(){

int i=3;

{

float temp = 23.0f;

temp /= i;

}

{

MyClass c = new MaClass();}

}

... 54 55 56 57 58 59 60 61 62 ...

... ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 23.0f23.0f23.0f23.0f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 7.6667f7.6667f7.6667f7.6667f ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 adresseadresseadresseadresse ...

... 54 55 56 57 58 59 60 61 62 ...

... 3333 ...

... 54 55 56 57 58 59 60 61 62 ...

... ...

Stack GC

12

lundi 5 septembre 2011

Page 13: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Bases du C#types

• Les types 2 : types valeurs et types références• Les types valeurs et les références aux types références sont

alloués sur la pile (Stack)• Les types références sont alloués sur le tas (Heap)• copie de types valeurs : les contenus sont copiés et

indépendants• copie de types références : les références sont copiées et

pointent donc sur le même espace mémoire sur le tas

13

lundi 5 septembre 2011

Page 14: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Bases du C#paramètres

• Les paramètres (cf. exemple 4)• passage par valeur• passage par référence• passage par référence de type valeur : ref, out• paramètres optionnels et nommés : optional and named• ref, out, optional and named• optional parameters to minimize method overloads (exemple 5)

• attention : il faut considérer le nom des paramètres comme faisant partie de la partie publique de l’API

• une fois qu’il y a eu une release de l’API, faire des overloads pour les paramètres par défaut rajouter dans les prochaines releases

14

lundi 5 septembre 2011

Page 15: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Bases du C#expressions, instructions et espace de noms

• Expressions et instructions : comme le C++• instructions logiques (if, else...) : cf. C++• instructions itératives (while, do-while, for) : cf. C++• + foreach (cf. exemple 6)• switch ++ (cf. exemple 7)

• Espace de noms : Namespaces + using (cf. exemple 8)

15

lundi 5 septembre 2011

Page 16: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#classes : syntaxe, champs, constructeurs

• Classes : (champs, initialiseurs et constructeurs)• syntaxe, déclaration, utilisation (proche C++)• champs (proche C++)

➡ initialiseurs • de types valeur et de types référence

• constructeurs (proche C++)➡ this keyword

16

lundi 5 septembre 2011

Page 17: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#classes : champs

• Classes : (champs, const, readonly)• champs 2

➡readonly vs const (≠ entre compile time et run time)• const (plus rapide mais inchangeable) quand la constante

est amenée à ne jamais être modifiée (quelle que soit la version du programme) : e.g. constantes de chaînes de caractères XML, enum, attribute parameters, ...

• readonly (plus lent mais peut être initialisée au démarrage) si la «variable» doit garder la même valeur tout au long du programme, mais dépend de l’initialisation

• dans le doute : readonly• attention aux types référence avec un readonly par exemple !

(cf. exemple 10)

17

lundi 5 septembre 2011

Page 18: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#classes : champs, initialiseurs, constructeurs

• Classes : (champs, initialiseurs)• initialiseurs initialiseurs vs constructeurs

• ordre : initialiseurs PUIS constructeurs• code des initialiseurs «rajouté» par le compilateur avant

chaque constructeur (+ constructeur par défaut s’il n’existe pas)

• exécutés dans l’ordre de déclaration dans la classe• exécutés avant les constructeurs de la classe mère

18

lundi 5 septembre 2011

Page 19: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#classes : champs, initialiseurs, constructeurs

• Classes : (champs, initialiseurs)• initialiseurs initialiseurs vs constructeurs

• règle générale : préférer l’utilisation d’initialiseurs• conseil 1 : éviter initialiseur + constructeur pour une variable

• si la valeur d’initialisation est toujours la même, préférer l’initialiseur

• si la valeur peut être différente dans au moins un constructeur, préférer les constructeurs et aucun initialiseur

• conseil 2 : éviter l’initialiseur pour initialiser à 0 ou null• conseil 3 : préférer le constructeur si on veut gérer les

exceptions de l’initialisation d’une variable

19

lundi 5 septembre 2011

Page 20: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#classes : méthodes, propriétés, indexeurs

• Classes (méthodes, this, propriétés, indexeurs)• méthodes (proche C++)

• overloads• this (proche C++)• propriétés (cf. exemple 11)• indexeurs (cf. exemple 12)

20

lundi 5 septembre 2011

Page 21: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#classes : static, partial

• Classes (static, partial)• static (proche C++) (exemple 13)

• membres, propriétés ou méthodes statiques : liés au type et non à une instance

• ordre : static initializers du type (dans l’ordre de déclaration), initializers des membres instances, static constructor (ctor par défaut, private), puis constructeurs des instances...

• static class : composée uniquement de membres, propriétés, méthodes (...) statiques

• pattern connu utilisant static : singleton• partial : permet de définir une classe sur plusieurs fichiers

(exemple 14)• finaliseurs

21

lundi 5 septembre 2011

Page 22: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#classes : accesseurs et visibilité

• Accesseurs• public : visible par tous, ainsi qu’en dehors de l’assemblage• internal : visible par toutes les classes de l’assemblage (dll ou

exe) uniquementaccesseur par défaut des classes

• protected : visible par la classe et les classes filles• private : visible par la classe uniquement

accesseur par défaut des membres, propriétés et méthodes d’une classe

• protected internal

22

lundi 5 septembre 2011

Page 23: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Encapsulation : propriétés et visibilité

• Encapsulation• Propriétés

• s’utilisent comme des membres, mais ont la logique des méthodes (getter et setter) => ENCAPSULATION

• aussi rapides que les membres• très (très (très) ) utilisés dans le framework .NET, WPF,

SilverLight, WCF, ASP.NET, ...• plus évolutives que les membres (il me faut un test de plus...)• bien pour le multithread• peuvent être abstraites• accesseurs différents du setter et du getter

• visibilité des types : accesseurs

23

lundi 5 septembre 2011

Page 24: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Héritage : syntaxe, overload

• Héritage (proche C++)• syntaxe (cf. exemple 15)

• accesseur protected• constructeur : appel du ctor de la classe mère avec base• sealed : accesseur pour empêcher l’héritage ou l’overload

de méthodes• method or field overload : (cf. exemple 16)

• conseillé d’utiliser new pour montrer que c’est intentionnel...• ... mais plutôt déconseillé de surcharger les méthodes dans

les classes filles dans une API

24

lundi 5 septembre 2011

Page 25: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Héritage : initialiseurs et constructeurs

• Héritage (proche C++)• initialiseurs et constructeurs (cf. exemple 17) :

• initializers statiques de la classe fille• constructeur statique de la classe fille• initializers (instance) de la classe fille• initializers statiques de la classe mère• constructeur statique de la classe mère• initializers (instance) de la classe mère• constructeur (instance) de la classe mère• constructeur (instance) de la classe fille

25

lundi 5 septembre 2011

Page 26: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Héritage : casting

• Héritage (proche C++) • Casting (cf. exemple 18)

• Upcasting : implicite• Downcasting

• operator is• operator as

• plus sûr que le cast aveugle (C-like) + exception• plus rapide en exécution• => à préférer

26

lundi 5 septembre 2011

Page 27: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Héritage/Polymorphisme

• Héritage et Polymorphisme (proche C++)• virtual (cf. exemple 19)• new vs virtual vs override (cf. exemples 16 et 19)

• Classes abstraites (cf. exemple 20)

27

lundi 5 septembre 2011

Page 28: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#object type

• Type object (cf. exemple 21)• GetType, Equals, GetHashCode• ToString• conseil : essayer de toujours réécrire ToString dans les classes

publiques de l’API• boxing unboxing

28

lundi 5 septembre 2011

Page 29: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Structures

• Structures (cf. exemple 22)• value type • pas d’héritage (mais implémentation d’interfaces)• ne peuvent pas avoir de constructeur par défaut• ne peuvent pas avoir de finaliseurs• ne peuvent pas avoir de membres virtuels• pas d’initialiseurs pour les champs• pas de propriétés automatiques

• attention aux références => retour sur les types références

29

lundi 5 septembre 2011

Page 30: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : value type vs reference type (suite...)

struct Complex{

public int Real;public int Img;

public Complex(int a, int b){...}

}

static void Main(){

Complex c1 = new (1, -2);

Complex c2 = new (-3, 4);

c2 = c1;

c2.Real = 5; c2.Img = -6;}

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... ...

Stack

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... 1111 -2-2-2-2 ...

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... 1111 -2-2-2-2 -3-3-3-3 4444 ...

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... 1111 -2-2-2-2 1111 -2-2-2-2 ...

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... 1111 -2-2-2-2 5555 -6-6-6-6 ...

30

lundi 5 septembre 2011

Page 31: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : value type vs reference type (suite...)

class Complex{

public int Real;public int Img;

public Complex(int a, int b){...}

}

static void Main(){

Complex c1 = new (1, -2);

Complex c2 = new (-3, 4);

c2 = c1;

c2.Real = 5; c2.Img = -6;}

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... ...

Stack

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... adr. c1adr. c1adr. c1adr. c1 ...

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... adr. c1adr. c1adr. c1adr. c1 adr. c2adr. c2adr. c2adr. c2 ...

1

-2

-3

4

31

lundi 5 septembre 2011

Page 32: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : value type vs reference type (suite...)

class Complex{

public int Real;public int Img;

public Complex(int a, int b){...}

}

static void Main(){

Complex c1 = new (1, -2);

Complex c2 = new (-3, 4);

c2 = c1;

c2.Real = 5; c2.Img = -6;}

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... ...

Stack

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... adr. c1adr. c1adr. c1adr. c1 ...

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... adr. c1adr. c1adr. c1adr. c1 adr. c2adr. c2adr. c2adr. c2 ...

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... adr. c1adr. c1adr. c1adr. c1 adr. c2adr. c2adr. c2adr. c2 ...

1

-2

-3

4to beGC

32

lundi 5 septembre 2011

Page 33: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

Heap

Bases du C#Gestion de la mémoire : value type vs reference type (suite...)

class Complex{

public int Real;public int Img;

public Complex(int a, int b){...}

}

static void Main(){

Complex c1 = new (1, -2);

Complex c2 = new (-3, 4);

c2 = c1;

c2.Real = 5; c2.Img = -6;}

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... ...

Stack

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... adr. c1adr. c1adr. c1adr. c1 ...

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... adr. c1adr. c1adr. c1adr. c1 adr. c2adr. c2adr. c2adr. c2 ...

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... adr. c1adr. c1adr. c1adr. c1 adr. c2adr. c2adr. c2adr. c2 ...

... 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ...

... adr. c1adr. c1adr. c1adr. c1 adr. c2adr. c2adr. c2adr. c2 ...

5

-6

-3

4to beGC

33

lundi 5 septembre 2011

Page 34: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Immuabilité et structures

• Immuabilité• différentes immuabilités

• la vraie : constante, la valeur ne change jamais• write-once immutability : la valeur est initialisée une seule fois, puis ne

change jamais• shallow vs deep immutability : shallow immutability veut dire que la

valeur est non mutable mais qu’elle contient des membres «de type référence» mutables (e.g. un tableau)

• immutable façades : semblent immuables de l’extérieur (ne peuvent pas être modifiées de l’extérieur) mais changent de l’intérieur

• avantages : • plus sûr (nécessite moins de vérifications)• thread safe : accessible en lecture par plusieurs threads simultanés• utilisables dans les tables de hâchage• ...

• conseil : écrivez vos structures write-once immutable

34

lundi 5 septembre 2011

Page 35: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Interfaces

• Interfaces (cf. exemple 23)• différences avec les classes (abstraites)

• préférez une classe et des sous-classes lorsqu’elles doivent partager une même implémentation => définition de types

• préférez une interface et des implémentations lorsque ces dernières sont indépendantes => définition de fonctionnalités

• améliorent l’encapsulation

interfaces classes

une classe peut implémenter plusieurs interfaces une classe ne peut dériver que d’une seule classe

tous les membres d’une interface sont abstraits une classe abstraite peut avoir des membres abstraits et des membres concrets

les structures peuvent implémenter des interfaces une structure ne peut pas hériter d’une classe

35

lundi 5 septembre 2011

Page 36: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Énumération/Types imbriqués

• Enum (cf. exemple 24)• Types imbriqués (Nested Types)

36

lundi 5 septembre 2011

Page 37: C#marc.chevaldonne.free.fr/ens_rech/Csharp_XML_GI_2011_2012_files/cours1.pdf · Bases du C# syntaxe, types •1er programme en C# ( exemple 1) •tout est objet •Syntaxe • proche

création de types en C#Boxing Unboxing

• boxing unboxing• boxing : cast d’un type valeur vers un type référence

int x = 3;object obj = x;

• unboxing : cast d’un type référence vers un type valeurint y = (int) obj;

• lent => à éviter• interfaces et boxing

interface I { void Method(); }struct S : I { public void Method() {} }

• si on cast l’interface en struct => pas de boxingS s = new S(); /*pas de boxing*/ s.Method();

• si on cast une structure en une interface => boxingI i = s; /* boxing*/ i.Method();

37

lundi 5 septembre 2011