Download - C# et .NET : Enigmes et puzzles
![Page 1: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/1.jpg)
C# et .NETEnigmes et PuzzlesClément Gatin, Luc Vo Van
Code / Développement
Consultants DevMicrosoft
![Page 2: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/2.jpg)
Donnez votre avis !Depuis votre smartphone, sur : http://notes.mstechdays.fr
De nombreux lots à gagner toutes les heures !!!
Claviers, souris et jeux Microsoft…
Merci de nous aider à améliorer les TechDays
http://notes.mstechdays.fr
![Page 3: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/3.jpg)
Support PremierEntreprise Strategy
Microsoft Consulting Services
Concevoir et DéployerImaginer et Planifier Optimiser et Maintenir
Présentation de Microsoft Enterprise Services
Environnement de travail
Collaboration & social
Productivité dans le Cloud
Productivité On Premise
Application Critiques (Tier1)
Datacenter et Cloud
Relation client et ressources (ERP / CRM)
![Page 4: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/4.jpg)
4 ouvrages écrits par 13 Microsoftees
http://www.editions-eyrolles.com/livres/Windows-8-pour-les-professionnels
![Page 5: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/5.jpg)
Introduction et objectifs
Les énigmes1. Typage explicite (ou pas)2. Plus Plus3. Remise à Zéro4. (D)étonnante combinaison5. C# dans tous ses états6. Bouquet final
Agenda
![Page 6: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/6.jpg)
INTRODUCTION ET OBJECTIFS
![Page 7: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/7.jpg)
Approfondir la connaissance d’un outil fondamental
Apprécier la sophistication du compilateur
Repartir avec quelques bonnes pratiques
Se tester !
Pourquoi cette session ?
![Page 8: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/8.jpg)
Spécifications du langage
Historique en bref
Visual C#
![Page 9: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/9.jpg)
A. Sur InternetB. Sur le blog d’Anders HejlsbergC. Je l’ai toujours sur moiD. Dans l’aide F1 de Visual Studio
Enigme 0 : Où trouver la spécification ?
![Page 10: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/10.jpg)
A. Sur InternetB. Sur le blog d’Anders HejlsbergC. Je l’ai toujours sur moiD. Dans l’aide F1 de Visual Studio
Enigme 0 : Où trouver la spécification ?
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC#\Specifications
![Page 11: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/11.jpg)
Spécifications du langage
ILDASM
Historique en bref
Visual C#
![Page 12: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/12.jpg)
Merci d’être venus si nombreux !
this.Warrior = true;C’est parti.
![Page 13: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/13.jpg)
TYPAGE EXPLICITE (OU PAS)Enigme 1
![Page 14: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/14.jpg)
demo
{ typage explicite }(ou pas)
![Page 15: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/15.jpg)
A. Typage expliciteB. var C. Aucun
Enigme 1 : Quel mot clé est recommandé ?
![Page 16: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/16.jpg)
A. Typage expliciteB. var C. Aucun
Enigme 1 : Quel mot clé est recommandé ?
![Page 17: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/17.jpg)
ILDASM (Intermediate Language Disassembler) est livré avec Visual Studio et permet de parcourir l’IL
var ou déclaration explicite : c’est pareil
var != dynamic. Réservez dynamic à l’interop !
En synthèse
![Page 18: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/18.jpg)
PLUS PLUSEnigme 2
![Page 19: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/19.jpg)
demo
{ i++ }
![Page 20: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/20.jpg)
A. 1B. 2C. Ne compile pas
Enigme 2 : Qu’affiche le programme ?
![Page 21: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/21.jpg)
A. 1B. 2C. Ne compile pas
Enigme 2 : Qu’affiche le programme ?
![Page 22: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/22.jpg)
C# spécifie les comportements de manière détaillée
C’est la fin de l’échauffement !
En synthèse
![Page 23: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/23.jpg)
CLASSES ET STRUCTURES(petit) rappel
![Page 24: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/24.jpg)
La pile (stack)
Un espace de stockage par fonction
Contient les variables locales de la fonction
![Page 25: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/25.jpg)
La pile (stack)
static void Main(){ FaitQqch(); FaitAutreChose();}
Un espace de stockage par fonction
Contient les variables locales de la fonction
![Page 26: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/26.jpg)
La pile (stack)
Main
static void Main(){ FaitQqch(); FaitAutreChose();}
Un espace de stockage par fonction
Contient les variables locales de la fonction
![Page 27: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/27.jpg)
La pile (stack)
MainFaitQqch
static void Main(){ FaitQqch(); FaitAutreChose();}
Un espace de stockage par fonction
Contient les variables locales de la fonction
![Page 28: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/28.jpg)
La pile (stack)
Main
FaitAutreChose
static void Main(){ FaitQqch(); FaitAutreChose();}
Un espace de stockage par fonction
Contient les variables locales de la fonction
![Page 29: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/29.jpg)
La pile (stack)
Main
static void Main(){ FaitQqch(); FaitAutreChose();}
Un espace de stockage par fonction
Contient les variables locales de la fonction
![Page 30: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/30.jpg)
Le tas (heap)
Un espace de stockage pour le processus*
Contient les allocations d’objets : new()
Allocation contigüe en mémoire, garbage collectée et compactée
![Page 31: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/31.jpg)
Le tas (heap)
Les classes sontallouées sous forme d’objets sur le tason manipule un pointeur vers l’objet
User utilisateur = new User();
![Page 32: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/32.jpg)
Le tas (heap)
Luc
User utilisateur = new User();utilisateur.Name = "Luc";
Les classes sontallouées sous forme d’objets sur le tason manipule un pointeur vers l’objet
![Page 33: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/33.jpg)
Le tas (heap)
Luc28/11/1978
Les structures (struct)allouées localement : sur le tas ou dans l’objet
DateTime lucBirth = new DateTime(1979, 11, 28);
![Page 34: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/34.jpg)
Le tas (heap)
Les structures (struct)allouées localement : sur le tas ou dans l’objet
DateTime lucBirth = new DateTime(1979, 11, 28);utilisateur.BirthDate = lucBirth;
Luc28/11/1978
28/11/1978
![Page 35: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/35.jpg)
Le tas (heap)
Les structures (struct)allouées localement : sur le tas ou dans l’objetmanipulées par copie de valeurDateTime lucBirth = new DateTime(1979, 11, 28);utilisateur.BirthDate = lucBirth;
Luc28/11/1978
28/11/1978
![Page 36: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/36.jpg)
REMISE À ZÉROEnigme 3
![Page 37: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/37.jpg)
demo
{ Remise à Zéro }
![Page 38: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/38.jpg)
A. OuiB. NonC. Ca dépend des options du compilateurD. Ca veut dire quoi « ça compile » ?
Enigme 3 : Est-ce que ça compile ?
![Page 39: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/39.jpg)
A. OuiB. NonC. Ca dépend des options du compilateurD. Ca veut dire quoi « ça compile » ?
Enigme 3 : Est-ce que ça compile ?
![Page 40: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/40.jpg)
Le compilateur sait (assez) bien déterminer si les chemins de construction initialisent tous les membres
C’est un mécanisme fondamental du déterminisme de .NET
:this() permet d’enchaîner les ctor pour les objets complexes
this = new peut impressionner en soirée
En synthèse
- 40
![Page 41: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/41.jpg)
DANS LES COULISSES DES PROPRIÉTÉS
(petit) rappel
![Page 42: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/42.jpg)
demo
{ Propriétés }
![Page 43: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/43.jpg)
(D)ÉTONNANTE COMBINAISONEnigme 4
![Page 44: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/44.jpg)
demo
{ (D)étonnante Combinaison }
![Page 45: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/45.jpg)
A. False, FalseB. False, TrueC. False, NullReferenceExceptionD. La réponse D
Enigme 4 : Qu’affiche le programme ?
![Page 46: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/46.jpg)
A. False, FalseB. False, TrueC. False, NullReferenceExceptionD. La réponse D
Enigme 4 : Qu’affiche le programme ?
![Page 47: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/47.jpg)
Performance sur les objets valeursPas de garbage collectionPas d’indirection de pointeur
Les objets valeurs sont manipulés par copie, doncAttention aux mises à jourLes copies sont consommatrices en performance et en mémoire. 10 appels imbriqués = 10 copies = 10x en RAM
La copie de valeur peut engendrer des bugs difficiles à diagnostiquer
En synthèse
- 47
![Page 48: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/48.jpg)
Utilisez les structs pour des objets de petite taille
Evitez les confusions en n’ayant que des structs dont les champs sont en lecture seule
Préconisations
- 48
![Page 49: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/49.jpg)
C# DANS TOUS SES ÉTATSEnigme 5
![Page 50: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/50.jpg)
demo
{ C# dans tous ses états }yield return
![Page 51: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/51.jpg)
A. Nom1, Nom2, Clement, LucB. Nom1, Clement, Nom2, LucC. Clement, LucD. Nom1, Nom2
Enigme 5 : Qu’affiche ce programme
![Page 52: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/52.jpg)
A. Nom1, Nom2, Clement, LucB. Nom1, Clement, Nom2, LucC. Clement, LucD. Nom1, Nom2
Enigme 5 : Qu’affiche ce programme
![Page 53: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/53.jpg)
Une machine à états ?
- 53
1
2
3 5
4
Une machine à états est un ensemble d’états et de transitions n
![Page 54: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/54.jpg)
Une machine à états ?
- 54
public static IEnumerable<string> GetNames(){
Console.WriteLine("Nom 1"); yield return "Clement";
Console.WriteLine("Nom 2"); yield return "Luc";
}
1
2
3
![Page 55: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/55.jpg)
Chaque yield return correspond à un étatLe code entre deux yield return correspond à une transition
Le compilateur créé une classe machine à étatsMoveNext passe à l’état suivantL’état en cours est sauvegardéLes variables locales de la fonctions sont des
membresChaque appel de MoveNext fait un Goto
yield return
- 55
![Page 56: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/56.jpg)
demo
{ C# dans tous ses états }async await
![Page 57: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/57.jpg)
Chaque appel à une méthode préfixée de await est un état
Le code entre deux appels est une transition
Lors d’un appel à une méthode async, si après l’appel celle si n’est pas terminée (IsCompleted = false), un « awaiter » est créé, qui rappellera la machine à état à la fin de la tâche, pour continuer à l’état courant
async await
- 57
![Page 58: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/58.jpg)
Le compilateur génère des machines à état, qui permettent d’implémenter les scénarios de « reprise »
yield return et async sont des constructions bien plus sophistiquées qu’elles n’en ont l’air
L’intelligence et la quantité de code fournie par le compilateur est appréciable… et permet d’être plus productif
En synthèse
- 58
![Page 59: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/59.jpg)
BOUQUET FINALEnigme 6
![Page 60: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/60.jpg)
demo
{ Bouquet final }
![Page 61: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/61.jpg)
A. Alice a 10 ans, Bob a 11 ans, Charlie a 12 ans, Dave a 13 ans
B. Alice a 10 ans, Alice a 10 ans, Alice a 10 ans, Alice a 10 ans
C. Dave a 13 ans, Dave a 13 ans, Dave a 13 ans, Dave a 13 ans
D. Ne compile pas
Enigme 6 : Qu’affiche ce programme
![Page 62: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/62.jpg)
A. Alice a 10 ans, Bob a 11 ans, Charlie a 12 ans, Dave a 13 ans
B. Alice a 10 ans, Alice a 10 ans, Alice a 10 ans, Alice a 10 ans
C. Dave a 13 ans, Dave a 13 ans, Dave a 13 ans, Dave a 13 ans
D. Ne compile pas
Enigme 6 : Qu’affiche ce programme
![Page 63: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/63.jpg)
demo
{ Bouquet final }« The Encore »
![Page 64: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/64.jpg)
A. Alice a 10 ans, Bob a 11 ans, Charlie a 12 ans, Dave a 13 ans
B. Alice a 10 ans, Alice a 10 ans, Alice a 10 ans, Alice a 10 ans
C. Dave a 13 ans, Dave a 13 ans, Dave a 13 ans, Dave a 13 ans
D. Ne compile pas
Enigme 6 : Qu’affiche ce programme
![Page 65: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/65.jpg)
static string[] _Names = new[] { "Alice", "Bob", "Charlie" };
static void Main(string[] args){ string messageFormat = "Hello {0}";
List<Action> actions = new List<Action>();
for (int i = 0; i < _Names.Length; ++i) { string name = _Names[i]; actions.Add(() => Console.WriteLine(messageFormat, name)); }
foreach (var action in actions) action(); Console.ReadLine();}
class Main_Scope1{ string messageFormat; List<Action> actions;}
class Main_Scope2{ string name; Main_Scope1 parentScope;}
messageFormat = "Hello {0}"actions = { }
parentScopeName = "Alice"
parentScopeName = "Bob"
parentScopeName = "Charlie"
Action
Action
Action
Visual Studio 2012
![Page 66: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/66.jpg)
static string[] _Names = new[] { "Alice", "Bob", "Charlie" };
static void Main(string[] args){ string messageFormat = "Hello {0}";
List<Action> actions = new List<Action>();
string name; for (int i = 0; i < _Names.Length; ++i) { name = _Names[i]; actions.Add(() => Console.WriteLine(messageFormat, name)); }
foreach (var action in actions) action(); Console.ReadLine();}
class Main_Scope1{ string messageFormat; List<Action> actions; string name;}
class Main_Scope2{ Main_Scope1 parentScope;}
messageFormat = "Hello {0}" actions = { } name ="Charlie"
parentScope
parentScope
parentScope
Action
Action
Action
Visual Studio ≤ 2010
![Page 67: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/67.jpg)
Les closures sont un outil pratique et élégant dont la mécanique est implémentée par le compilateur
Les breaking changes au niveau compilation sont extrêmement rares, et sont pris très au sérieux par Microsoft
En synthèse
- 67
![Page 68: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/68.jpg)
Conclusion
![Page 69: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/69.jpg)
Les évolutions du langage C# sont principalement liées au compilateur lui-même, avec peu de support spécifique de la CLR
Parti d’une programmation purement itérative proche du langage machine, le C# permet aujourd’hui d’exprimer élégamment des principes complexes par la génération de code
AsynchronismeClosuresGénérateurs
En synthèse
- 69
![Page 70: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/70.jpg)
int i = 0;Console.Write(string.Format("{0} {1} {2} {3}",
++i,i++ * ++i,i,i++ + i++));
Pour finir http://notes.mstechdays.fr
![Page 71: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/71.jpg)
Donnez votre avis !Depuis votre smartphone, sur : http://notes.mstechdays.fr
De nombreux lots à gagner toutes les heures !!!
Claviers, souris et jeux Microsoft…
Merci de nous aider à améliorer les TechDays
http://notes.mstechdays.fr
![Page 72: C# et .NET : Enigmes et puzzles](https://reader035.vdocuments.pub/reader035/viewer/2022081422/5561e8f3d8b42aa5068b5157/html5/thumbnails/72.jpg)
Formez-vous en ligne
Retrouvez nos évènements
Faites-vous accompagner gratuitement
Essayer gratuitement nos solutions IT
Retrouver nos experts Microsoft
Pros de l’ITDéveloppeurs
www.microsoftvirtualacademy.com
http://aka.ms/generation-app
http://aka.ms/evenements-developpeurs
http://aka.ms/itcamps-france
Les accélérateursWindows Azure, Windows Phone,
Windows 8
http://aka.ms/telechargements
La Dev’Team sur MSDNhttp://aka.ms/devteam
L’IT Team sur TechNethttp://aka.ms/itteam