View
4.511
Download
10
Category
Preview:
Citation preview
01/06/2016
1
Formation Programmer en C# 6 alphorm.com™©
Formation C# 6.0
Avancée
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
2
Formation Programmer en C# 6 alphorm.com™©
Plan
• Présentation du formateur
• Présentation du plan de formation
• Connaissances requises
• Publics concernés
• Liens utiles
01/06/2016
3
Formation Programmer en C# 6 alphorm.com™©
Pésentation du formateur
Béchir Béjaoui
• Consultant et expert certifié en infrastructure réseau, développement des solutions distribuées et Business Intelligence
• Certifications : MCITP en SQL SERVER BI, MCPD Applications Distribuées .net 3.5, MCSD Team Fondation Server , MCTS
• Mes références :
� Profil LinkedIn : tn.linkedin.com/pub/bejaoui/2b/245/6b
� Profil C-sharpcorner : www.c-sharpcorner.com/authors/yougerthen/bechir-bejaoui.aspx
� Profil MSDN: social.msdn.microsoft.com/profile/masnsn
� Profil Alphorm : http://www.alphorm.com/formateur/bechir-bejaoui
01/06/2016
4
Formation Programmer en C# 6 alphorm.com™©
Mes formations sur Alphorm
01/06/2016
5
Formation Programmer en C# 6 alphorm.com™©
Présentation du plan de formation
• Le spectre d'évolution du C# du 2.0 au 6.0
• Les nouveautés apportées avec le .Net Framework 4.6
• Le Scriptcs Engine
• Le Roslyn
• Le C# 6.0 et le Cloud une introduction
• Un ensemble d’études de cas: Scriptcs, Les types, Les collections, La sérialisation, LINQ, Réflexion, Programmation dynamique, Threading, Interopérabilité, Base de données
01/06/2016
6
Formation Programmer en C# 6 alphorm.com™©
Connaissances requises
• Il est à noter que cette formation ne représente pas un cours magistral de C# et du .Net Framework, c’est une formation avancée fortement orientée pratique C#
• Cette formation n’est pas orientée vers les débutants en terme du .Net Framework et du C#
• Par conséquent, le public concerné doit avoir des connaissances intermédiaires au moins en terme de programmation et notamment C#
• La connaissance d’utilisation d’un environnement de développement principalement Visual Studio ou autre IDE qui supporte au moins C# 4.0/5.0 est indispensable
01/06/2016
7
Formation Programmer en C# 6 alphorm.com™©
Public concernés
• Cette formation cible
� Les professionnels et développeurs qui ont déjà un niveau intermédiaire en terme de C# et du .Net Framework qui cherchent une mise à niveau de leurs connaissances en terme de nouveautés C# 6.0 et .Net Framework 4.6
� Les professionnels et développeurs expérimentés qui sont issus d’autres environnements tels que java, C++ et Linux, et qui veulent s’adapter au développement C#
� Les étudiants et les élèves ingénieurs qui ont déjà travaillé sur la plateforme .Net Framework et notamment les versions C# antérieures
� Les personnes en stage et qui veulent booster leurs carrières professionnelles à condition qu’ils aillent un niveau intermédiaire aux moins en terme de développement C#
01/06/2016
8
Formation Programmer en C# 6 alphorm.com™©
Liens utiles • Un lien vers mes articles
http://www.c-sharpcorner.com/members/bechir-bejaoui2
01/06/2016
9
Formation Programmer en C# 6 alphorm.com™©
Liens utiles • Un lien vers mon groupe Facebook C#
http://www.facebook.com/groups/csharp.programming/
01/06/2016
10
Formation Programmer en C# 6 alphorm.com™©
Liens utiles • Un lien vers mon groupe ma chaine Youtube
http://www.youtube.com/user/margoumix
01/06/2016
11
Formation Programmer en C# 6 alphorm.com™©
Are You ready ? ☺
01/06/2016
12
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 2.0 Partie I
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
13
Formation Programmer en C# 6 alphorm.com™©
Plan
• Les types Génériques
01/06/2016
14
Formation Programmer en C# 6 alphorm.com™©
Les types génériques
• Les types Génériques sont des types qui permettent d’attarder la spécification des types tels que :
� Les propriétés, indexeurs et champs
� Les arguments et types de retour des méthodes et des constructeurs
� Les éléments au niveau d’une collection
� Les définitions des classes, interfaces ,Delegates et structures
• Au moment de l’appel, le compilateur génère du code pour gérer le type de données spécifiques.
01/06/2016
15
Formation Programmer en C# 6 alphorm.com™©
Les types génériques
• Voici à présent un exemple d’utilisation des types génériques :
01/06/2016
16
Formation Programmer en C# 6 alphorm.com™©
Les types génériques
• Les avantages d’utilisation des génériques dans le code sont principalement :
� La réutilisation du code
� Plus de contrôle sur les types d’éléments au niveau des collections et les méthodes à travers les contraintes
� La performance sur le plan d’utilisation des listes en évitant les opérations du boxing/unboxing faite à chaque itération pour le cas des listes non génériques
01/06/2016
17
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Les types Génériques
01/06/2016
18
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 2.0 Partie II
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
19
Formation Programmer en C# 6 alphorm.com™©
Plan
• Les types Nullables
• Les itérateurs
01/06/2016
20
Formation Programmer en C# 6 alphorm.com™©
Les types Nullables
• Ils sont des types issus de la structure Nullable<T>
• Se sont des types qui peuvent stocker des valeurs nulles pour les types valeur comme les entiers, les flottants et les doubles
• Ils sont principalement utilisés pour représenter les valeurs Nulles au niveau des bases de données pour ces types valeur
• Ils sont définis selon les deux formes
� En utilisant un point d’interrogation qui précède le type
� En utilisant cette forme
01/06/2016
21
Formation Programmer en C# 6 alphorm.com™©
Les itérateurs
• Les itérateurs permettent de mieux gérer les itérations des éléments d’une collection donnée
• Un itérateur selon MSDN est défini comme une méthode, un accesseur ou un opérateur qui permet de réaliser une récurrence personnalisée
• Le mot clé « yield » permet d’itérer à travers une collection donnée pour retourner un ensemble d’éléments au niveau d’une fonction :
Cas d’utilisation de yield pour itérer une collection
01/06/2016
22
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Les types Nullables
• Les itérateurs
01/06/2016
23
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 2.0 Partie III
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
24
Formation Programmer en C# 6 alphorm.com™©
Plan
• Les classes partielles
• Les classes statiques
• Les méthodes anonymes
01/06/2016
25
Formation Programmer en C# 6 alphorm.com™©
Les classes partielles
• Les classes partielles sont des classes qui peuvent être fragmentées sur plusieurs fichiers .cs
• Les classes partielles sont indispensables pour les projets collaboratifs de taille considérable
• Le mot clé « partial » doit précéder la classe pour la marquer comme classe partielle
• Il est possible aussi de créer des structures et des interfaces partielles
01/06/2016
26
Formation Programmer en C# 6 alphorm.com™©
Les classes statiques• Les classes statiques sont principalement des conteneurs logiques des
méthodes statiques
• Les classes statiques ne sont pas « instanciables » comme les classes non statiques
• L’aspect bénéfique de ces classes, c’est qu’elles peuvent être partagées en différents niveaux du code sans le besoin de créer de nouvelles instances ce qui facilite l’implémentation de certain « Patterns »
Exemple de classe statique
01/06/2016
27
Formation Programmer en C# 6 alphorm.com™©
Les méthodes anonymes
• Une méthode anonyme est principalement considérée comme un bloque d’instructions qui peut être injecté en amont au niveau des arguments d’une autre méthode
Exemple d’utilisation des méthodes anonymes
01/06/2016
28
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Les classes partielles
• Les classes statiques
• Les méthodes anonymes
01/06/2016
29
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 3.0 Partie I
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
30
Formation Programmer en C# 6 alphorm.com™©
Plan
• Les initiateurs d’objets
• Les initiateurs de collections
• Les types implicites
01/06/2016
31
Formation Programmer en C# 6 alphorm.com™©
Les initiateurs d’objets
• Les initiateurs d’objets prennent une nouvelle forme différente que celle adoptée en C# 2.0 et versions antérieures
La forme des initiateurs précédemment
La forme des initiateurs en mode C# 3.0
01/06/2016
32
Formation Programmer en C# 6 alphorm.com™©
Les initiateurs de collections
• Les initiateurs de collections prennent une nouvelle forme, il est désormais possible d’adopter la forme ci-dessous
La forme des initiateurs de collections en mode C# 3.0
01/06/2016
33
Formation Programmer en C# 6 alphorm.com™©
Les types implicites
• Les types implicites sont essentiellement utilisés sous forme de variables locales pour inférer les types déjà définis
La définition d’une variablelocale anonyme
La définition de la même variable en mode CIL
01/06/2016
34
Formation Programmer en C# 6 alphorm.com™©
Les types implicites
• Les types implicites sont aussi utilisés dans un contexte de requêtes LINQ « Language Integrated Query » pour définir des types anonymes à la volée
La définition d’un type anonyme dans un contexte de LINQ
01/06/2016
35
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Les initiateurs d’objets
• Les initiateurs de collections
• Les types implicites
01/06/2016
36
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 3.0 Partie II
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
37
Formation Programmer en C# 6 alphorm.com™©
Plan
• Les méthodes extensions
01/06/2016
38
Formation Programmer en C# 6 alphorm.com™©
Les méthodes extensions
• Les méthodes extensions permettent d’étendre des types déjà définis dont le code source n’est plus accessible par principe d’encapsulation
• Il n’aura pas de soucis pour les classes dont l’héritage est permis, par contre il le sera pour les classes marquées par le mot clé « sealed »
Exemple de définition d’une méthode extension
01/06/2016
39
Formation Programmer en C# 6 alphorm.com™©
Les méthodes extensions
• En cas de coexistence de deux méthodes une originale et une méthode extension qui ont la même signature alors au moment de l’appel la priorité sera pour la méthode originale définie au niveau de la classe cible
• En cas de coexistence de deux méthodes extensions portant la même signature, une fait partie du namespace au quel la classe cible fait partie et l’autre fait partie d’un namespace différent, dans ce cas, la première aura la priorité au moment de l’appel
• En cas de coexistence de plusieurs méthodes extensions pour la même classe et qui ont la même signature mais qui font partie de namespacedifférents, en ce moment, il aura un conflit d’appel et une erreur au moment de la compilation sera levée
Exemple de définition d’une méthode extension
01/06/2016
40
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Les méthodes extensions
01/06/2016
41
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 3.0 Partie III
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
42
Formation Programmer en C# 6 alphorm.com™©
Plan
• Le LINQ
01/06/2016
43
Formation Programmer en C# 6 alphorm.com™©
Le LINQ
• C’est l’acronyme de «Language Integrated Query»
• C’est un ORM « Object Relational Mapping » nouvellement introduit à partir de C# 3.0
• Cet ORM ajoute des capacités d'interrogation sur des données au C# en utilisant une syntaxe proche de celle de SQL « Select Query Language » utilisé essentiellement dans le cadre des bases de données relationnelles
• LINQ définit un ensemble d’opérateurs de requêtes qui peuvent être utilisés pour effectuer des requêtes, filtrer et projeter des données au niveau de plusieurs structures et conteneurs de données tel que les bases de données, les fichiers DOM « Document Object Models » ….
01/06/2016
44
Formation Programmer en C# 6 alphorm.com™©
Le LINQ
• Le LINQ représente une variété de fournisseurs pour gérer les données
� LINQ to Object
� LINQ to SQL
� LINQ to Entities « Entity Framework 5.x/6»
� LINQ to XML
� LINQ to quelques choses …..
• Dans ce dernier cas, il est possible de créer un fournisseur LINQ personnalisé pour accéder à un conteneur de données particulier par exemple LINQ to LDAP, LINQ to Tweeter, LINQ to Facebook, LINQ to Google Maps
01/06/2016
45
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Le LINQ
01/06/2016
46
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 3.0 Partie IV
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
47
Formation Programmer en C# 6 alphorm.com™©
Plan
• Le LINQ to SQL
01/06/2016
48
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Le LINQ to SQL
01/06/2016
49
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 3.0 Partie IV
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
50
Formation Programmer en C# 6 alphorm.com™©
Plan
• Le LINQ to Entities
01/06/2016
51
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Le LINQ to Entities
01/06/2016
52
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 3.0 Partie V
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
53
Formation Programmer en C# 6 alphorm.com™©
Plan
• Le LINQ to XML
01/06/2016
54
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Le LINQ to XML
01/06/2016
55
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 3.0 Partie VI
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
56
Formation Programmer en C# 6 alphorm.com™©
Plan
• La jointure en mode LINQ
01/06/2016
57
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La jointure en mode LINQ
01/06/2016
58
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 3.0 Partie VII
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
59
Formation Programmer en C# 6 alphorm.com™©
Plan
• Les expressions Lambda
• Les méthodes partielles
01/06/2016
60
Formation Programmer en C# 6 alphorm.com™©
Les expressions Lambda
• Il est possible de qualifier les expressions Lambda comme les descendants des méthodes anonymes
• Elles sont essentiellement implémentées dans un contexte LINQ« Language Integrated Query » comme filtres de requêtes
Une approche de comparaison des méthodes anonymes et les expressions Lambda
01/06/2016
61
Formation Programmer en C# 6 alphorm.com™©
Les méthodes partielles
• La notion des méthodes partielles est similaire à celle de classes partielles au niveau de la version C# 2.0
• Dans un contexte C# 2.0 il n’est pas possible de diviser le code d’une méthode sur plusieurs fichiers .cs pourtant il est possible de le faire au niveau des classes
• Une méthode partielle pourra ne pas avoir une implémentation à un niveau donné, mais elle ne sera exécutée proprement que lorsqu’elle admet une implémentation
• Une méthode partielle est marquée par le mot clé « partial », elle doit être privée et ne retourne aucune valeur « void »
01/06/2016
62
Formation Programmer en C# 6 alphorm.com™©
Les méthodes partielles
• Les méthodes partielles sont uniquement définies au niveau des classes partielles
• Les types d’arguments « out » sont interdits lors du passage des arguments par référence, par conséquent, seul le mot clé « ref » pourra être utilisé dans ce cas
• Il n’est pas possible de pointer un type DELEGATE vers une méthode partielle
• Les méthodes partielles peuvent être statiques, elles peuvent aussi utiliser des types génériques
01/06/2016
63
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Les expressions Lambda
• Les méthodes partielles
01/06/2016
64
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 4.0 Partie I
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
65
Formation Programmer en C# 6 alphorm.com™©
Plan
• La programmation dynamique
01/06/2016
66
Formation Programmer en C# 6 alphorm.com™©
La programmation dynamique
• La programmation dynamique est la fonctionnalité majeure introduite par la .Net Framework 4.0
• La programmation dynamique veut dire utiliser une entité qui n’est pas définie en temps de compilation comme un objet de type bien défini
• La programmation dynamique résout beaucoup de soucis en relation avec les objets qui n’ont pas une forme déterminée jusqu’au moment de l’exécution du programme
• On prends comme exemple les structures d’objets définis au niveau des structures XML souvent complexes et surtout variables
• Ou encore les classes définies dans d’autres environnements de programmations et dont on veut les importer dans le contexte CLR
01/06/2016
67
Formation Programmer en C# 6 alphorm.com™©
La programmation dynamique• La programmation dynamique nécessite le DLR « Dynamic Language
Runtime » qui est une couche située au dessus du CLR « Common language Runtime »
• Le DLR utilise des classes CallSite<T> pour représenter les types dynamiques dont la création se fait lors de l’exécution
• La famille des classes dites Binders dont le nom finit toujours par Bindersont dérivées de la classe Binder qui assure une liaison tardive. Cette liaison permet de définir les types dynamiques au moment de l’exécution
01/06/2016
68
Formation Programmer en C# 6 alphorm.com™©
La programmation dynamique
C# VB.NET
Dynamic LanguageRuntime
Common LanguageRuntime
.Net
DOM
Script Engines
Expression Tree
CallSite<T>
Position du DLR dans la plateforme .Net
Binder
01/06/2016
69
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La programmation dynamique
01/06/2016
70
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 4.0 Partie II
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
71
Formation Programmer en C# 6 alphorm.com™©
Plan
• La programmation dynamique
01/06/2016
72
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La programmation dynamique
01/06/2016
73
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 4.0 Partie III
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
74
Formation Programmer en C# 6 alphorm.com™©
Plan
• La programmation dynamique
01/06/2016
75
Formation Programmer en C# 6 alphorm.com™©
La programmation dynamique
• Les classes ExpandoObject et DynamicObject sont les principales implémentations de l’interface IDynamicMetaObjectProvider. Elles permettent la création des objets dynamiques qui sont définis par le mot clé dynamic
L’interface IDynamicMetaObjectProvider
01/06/2016
76
Formation Programmer en C# 6 alphorm.com™©
La programmation dynamique• Il y a souvent une amalgame entre utilisation d’un objet ExpandoObject
et faite d’ avoir recours à un dictionnaire
Tableau comparatif entre l’utilisation d’un dictionnaire et un ExpandoObejct
Définition du code
Identique quant à la définition d’un objet classique
Identique quant à la population d’une collection
Difficulté - Difficultés en cas des objets hiérarchiques complexes
Souplesse Très souple au changements des structures d’objets qu’on veut créer
-
01/06/2016
77
Formation Programmer en C# 6 alphorm.com™©
La programmation dynamique
Comportement Implémente l’interfaceINotifyPropertyChanged
N’implémente pas l’interfaceINotifyPropertyChanged
Les méthodes Possible de définir des méthodes
-
Les événements Possible de définir des événements -
Tableau comparatif entre l’utilisation d’un dictionnaire et un ExpandoObject (La suite)
01/06/2016
78
Formation Programmer en C# 6 alphorm.com™©
La programmation dynamique• La classe ExpandoObject est utilisée pour les cas de figures simples de
définition des objets dynamiques
• Cependant, la classe DynamicObject est utilisée pour des scenarii encore plus avancés
• L’utilisation de DynamicObject ne se fait pas directement mais à travers la définition d’une classe qui hérite de DynamicObject
• En suite, il faut ajouter la logique désirée à travers la réécriture de l’une ou de l’ensemble de ces méthodes
01/06/2016
79
Formation Programmer en C# 6 alphorm.com™©
La programmation dynamique
Les méthodes à implémenter en cas d’utilisation de DynamicObject
TryInvokeMember Lors de l’appel d’une méthode
TryGetMember Lors de l’appel de l’accesseur GET de propriété
TrySetMember Lors de l’appel de l’accesseur SET de propriété
TryGetIndex Lors de l’appel de l’accesseur GET de l’indexeur
TrySetIndex Lors de l’appel de l’accesseur SET de l’indexeur
TryUnaryOperation Lors de l’appel d’une opération unaire tél que ++,+=, !
TryBinaryOperation Lors de l’appel d’une opération binaire tél que +, -, *, !=
TryConvert Lors de la conversion de l’objet dynamique
TryInvoke Lors de l’instanciation de l’objet dynamique
01/06/2016
80
Formation Programmer en C# 6 alphorm.com™©
• Voir plus de détails sur la programmation dynamique, je vous invite à lire mon article « Toying with C# 4.0 » publié en 2010 à c-sharpcorner.com
01/06/2016
81
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La programmation dynamique
01/06/2016
82
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 4.0 Partie IV
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
83
Formation Programmer en C# 6 alphorm.com™©
Plan• Les paramètres optionnels
• Les arguments nommés
01/06/2016
84
Formation Programmer en C# 6 alphorm.com™©
Les paramètres optionnels• Les paramètres optionnels donnent aux programmeurs le choix d’ entrer ou pas
les valeurs des arguments d’une méthode lors de son appel à condition que des valeurs par défaut soient initialement attribuées lors de la définition de ces méthodes en question
• Si aucune valeur n’est définie lors de l’appel, cette valeur par défaut sera utilisée automatiquement
Exemple de définition des paramètres optionnels
01/06/2016
85
Formation Programmer en C# 6 alphorm.com™©
Les paramètres optionnels• Les paramètres optionnels doivent apparaître au dernières positions après les
paramètres non optionnels
• Sinon une erreur sera levée dans le cas contraire
L’erreur CS1737 suite au non respect de la définition des paramètres optionnels
01/06/2016
86
Formation Programmer en C# 6 alphorm.com™©
Les arguments nommés
Exemple de définition des arguments nommés
• Les arguments nommés facilitent la vie au programmateur qui connaît les arguments au sein d’une méthode mais qui ne sait pas leurs ordres
01/06/2016
87
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert• Les paramètres optionnels
• Les arguments nommés
01/06/2016
88
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 4.0 Partie V
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
89
Formation Programmer en C# 6 alphorm.com™©
Plan• La variance des génériques
01/06/2016
90
Formation Programmer en C# 6 alphorm.com™©
La variance des génériques• Elle est inspirée de la théorie des catégories, c’est une théorie d’origine
mathématique qui assume que si un type A est convertible en type B, il sera possible d’utiliser ce dernier au lieu du type A ou utiliser le type Atout simplement
• Elle est déjà appliquée pour le cas des anciennes collections tel que ArrayList mais elle n’est pas du tout Safe
• Les types génériques qui sont introduit à partir de la version C# 2.0 sont strictement invariants
• La variance n’est appliquée qu’au types dont la conversion de l’un vers l’autre est possible.
01/06/2016
91
Formation Programmer en C# 6 alphorm.com™©
La variance des génériques• La variance des génériques est divisée en deux catégories à savoir, la
Covariance et la Contravariance
Exemple de Covariance Exemple de Contravariance
01/06/2016
92
Formation Programmer en C# 6 alphorm.com™©
La variance des génériques
Exemple d’utilisation de la covariance l’interface IComparable<T>
Exemple d’utilisation de Contravariance l’interface IEnumerable< T>
01/06/2016
93
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La variance des génériques
01/06/2016
94
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 4.0 Partie VI
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
95
Formation Programmer en C# 6 alphorm.com™©
Plan• La classe Task
• La gestion des exceptions issues de Task
• L’annulation de Task
• La programmation parallèle
• Nouvelles collections supportant la multithreading
01/06/2016
96
Formation Programmer en C# 6 alphorm.com™©
La classe Task
• L'espace de noms System.Threading.Tasks fournit les types qui simplifient le travail d'écriture du code simultané.
� Il existe plusieurs raisons de préférer les Task au lieu des Thread
� Les Task utilisent le TheradPool du CLR d’une manière directe ce qui rend leur utilisation plus performante
� Il est désormais possible l’achèvement d’un Task sans avoir recourt à un signal comme il est le cas pour les Thread
� Il est possible d’organiser les Task pour les enchainer les uns après les autres, la relation entre les Task est considérée une relation Père/Fils dans ce contexte
� Le Task représente une abstraction plus élevée par conséquent il est plus simple de l’utiliser que le Thread
01/06/2016
97
Formation Programmer en C# 6 alphorm.com™©
La classe Task• Une tâche qui retourne aucune valeur est représentée par la classe
System.Threading.Tasks.Task
• Une tâche qui retourne une valeur est représentée par la classeSystem.Threading.Tasks.Task<TResult>, qui hérite de Task.
01/06/2016
98
Formation Programmer en C# 6 alphorm.com™©
La classe Task
• Une tâche de continuation est une tâche asynchrone appelée par une autre tâche, également appelée antécédent lorsque ce dernier est terminé.
01/06/2016
99
Formation Programmer en C# 6 alphorm.com™©
La gestion des exceptions issues de Task • Les exceptions sont propagées lorsque vous utilisez l'une des méthodes
statiques ou d'instance Task.Wait ou Task<TResult>.Wait et lorsque vous les gérer en incluant l'appel dans une instruction try-catch.
• Si une exception non gérée est levée , l'exception ne sera pas apparente directement, elle sera stockée dans une collection d’exceptions membre de AggregateException
• Lorsque la méthode Wait ou la propriété Résultat est invoquée , une AggregateException sera levée dans ce cas
• La propriété InnnerExceptions permet de collecter les données sur les exceptions qui sont levées au cour d’exécution de la tâche
01/06/2016
100
Formation Programmer en C# 6 alphorm.com™©
La gestion des exceptions issues de Task
Une méthode à déclenchementpotentiel d’erreur
La gestion de l’erreur dans un contexte task
01/06/2016
101
Formation Programmer en C# 6 alphorm.com™©
La gestion des exceptions issues de Task
Une méthode à déclenchementpotentiel d’erreur
La gestion de l’erreur dans un contexte taskUne alternative qui utilise la prédicatHandle de l’exception AgregateException
01/06/2016
102
Formation Programmer en C# 6 alphorm.com™©
L’annulation de Task • Il est possible de forcer l’annulation d’un Task même sans levée d’exception à
l’aide des objets du type CancellationToken et CancellationTokenSource
• La classe CancellationTokenSource
01/06/2016
103
Formation Programmer en C# 6 alphorm.com™©
L’annulation de Task
La structure CancellationToken
01/06/2016
104
Formation Programmer en C# 6 alphorm.com™©
L’annulation de Task • Tout d’abord, il faut ajouter un objet CancellationToken comme paramètre au
niveau de la méthode cible
• Il faut appeler la méthode ThrowIfCancellationRequested si une condition d’annulation est vraie
01/06/2016
105
Formation Programmer en C# 6 alphorm.com™©
L’annulation de Task • D’autre part, Il faut forcer l’annulation à travers l’appel de la méthode Cancel de
l’objet CancellationTokenSource définie dans le code appelant
01/06/2016
106
Formation Programmer en C# 6 alphorm.com™©
La programmation parallèle• La bibliothèque de tâches parallèles (TPL) supporte le parallélisme de traitement
des données avec la classe System.Threading.Tasks.Parallel.
• La méthode Parallel.Invoke offre un moyen pratique d'exécuter simultanémentun nombre d'instructions arbitraires. Pour cela, on pourra passer pour chaqueélément de travail un délégué Action ou une expression lambda qui appelle uneméthode nommée ou fournit un code Inline.
01/06/2016
107
Formation Programmer en C# 6 alphorm.com™©
La programmation parallèle• La classe System.Threading.Tasks.Parallel fournit aussi des implémentations
parallèles basées sur la méthode des boucles for et foreach .
01/06/2016
108
Formation Programmer en C# 6 alphorm.com™©
Nouvelles collections supportant le multithreading
• Le .NET Framework 4 introduit l'espace de noms System.Collections.Concurrent qui inclut plusieurs classes de collections qui sont à la fois thread-safe et évolutives
• Plusieurs threads peuvent, sans risque et de façon efficace, ajouter ou supprimer des éléments de ces collections sans extra code
• Pour lire les données d’une manière concurrentielle, il suffit d’utiliser les collections génériques classiques
01/06/2016
109
Formation Programmer en C# 6 alphorm.com™©
Nouvelles collections supportant le multithreading
Type Description
BlockingCollection<T> Fournit des fonctionnalités de délimitation et de blocage pour tout type qui implémente IProducerConsumerCollection<T>
ConcurrentDictionary<TKey, TValue> Implémentation thread-safe d'un dictionnaire de paires clé-valeur.
ConcurrentQueue<T> Implémentation thread-safe d'une file d'attente FIFO (premier entré, premier sorti).
ConcurrentStack<T> Implémentation thread-safe d'une pile LIFO (dernier entré, premier sorti).
ConcurrentBag<T> Implémentation thread-safe d'une collection non ordonnée d'éléments.
IProducerConsumerCollection<T> Interface qu'un type doit être implémenté pour être utilisé dans uneBlockingCollection.
01/06/2016
110
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La classe Task
• La gestion des exceptions issues de Task
• L’annulation de Task
• La programmation parallèle
• Nouvelles collections supportant le multithreading
01/06/2016
111
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 5.0
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
112
Formation Programmer en C# 6 alphorm.com™©
Plan• La nouvelle forme des fonctions asynchrones async/await
• Les classes CallerMemberName, CallerFilePath et CallerLineNumber
01/06/2016
113
Formation Programmer en C# 6 alphorm.com™©
Les fonctions asynchrones
• Les fonctions asynchrones représentent une nouvelle forme d’implémentation des tâches relativement de longue durée
• Les fonctions asynchrones évitent que l’application soit figée jusqu’à la terminaison d’une tâche alternative
• Cette fonctionnalité à été déjà utilisée, elle était représentée par le model APM Asynchronous Programming Model
• Auparavant, nous utilisons les délégués pour implémenter l’exécution des tâches d’une manière simultanée et asynchrone
• Avec C# 5.0, il y a eu des améliorations majeures dans ce contexte qui facilite la vie au programmeur en lui laissant se concentrer plutôt sur sa tâche principale au lieu d’ajouter de l’extra code pour gérer la situation
01/06/2016
114
Formation Programmer en C# 6 alphorm.com™©
Les fonctions asynchrones
• Pour utiliser « async » et « await » d’une manière appropriée, il faut que le type de retour des fonctions asynchrones marquées par le mot clé « async » soit :
� void
� Task
� Task<T> ou T est un type générique qui représente le type de retour
• Lors de la conversion d’une méthode synchrone en asynchrone
� Toute méthode retournant un type T, doit devenir une méthode retournant un type Task<T>
� Toute méthode retournant « void », doit devenir une méthode retournant un type Task
01/06/2016
115
Formation Programmer en C# 6 alphorm.com™©
Les fonctions asynchrones
• L’utilisation du type void a une particularité, c’est qu’il rend la gestion des événements possible, car généralement les gestionnaires d’événements ont le type de retour void
• Cependant, il va falloir prendre en considération quelques différences à l’égard d’utilisation de void et Task
• Toute exception levée en cas de void sera portée directement sur l’objet SynchronizationContext qui était actif lors de l’appel de la méthode asynchrone
• L’exception une fois levée, elle ne sera pas automatiquement capturée au sein du fonction appelante comportant un type de retour void
01/06/2016
116
Formation Programmer en C# 6 alphorm.com™©
Les fonctions asynchrones
• Un autre détail qui rend la gestion encore plus difficile en cas des méthodes void c’est la précision du moment de réponse
• Il est facile de commencer plusieurs méthodes asynchrones void , mais il est difficile de déterminer quand elles finissent.
• Pour le cas des méthodes Task , il est possible de gérer ce côté via l’appel de la méthode WhenAll(Ienumerable<Task>)
• Il faut garder à l’esprit d’utiliser les méthodes void seulement en cas de gestion des événements asynchrones
01/06/2016
117
Formation Programmer en C# 6 alphorm.com™©
Les fonctions asynchrones
Exemple de définition de async /await
01/06/2016
118
Formation Programmer en C# 6 alphorm.com™©
Les fonctions asynchrones
Exemple du code appelant
01/06/2016
119
Formation Programmer en C# 6 alphorm.com™©
Les classes CallerMemberName, CallerFilePath et CallerLineNumber
• Les classes attributs facilitent la vie des développeurs en phase de test de leurs code en permettant d’avoir
� Le nom de l’appelant qui est essentiellement le nom d’une méthode
� Le fichier qui contient cette méthode appelante
� Le numéro de ligne où la méthode appelée est invoquée
01/06/2016
120
Formation Programmer en C# 6 alphorm.com™©
Les classes CallerMemberName, CallerFilePath et CallerLineNumber
• Pour profiter de cette fonctionnalité, la seule manière est de définir des arguments optionnels à la fin de la méthode cible de débogage et les marquer par l’un des attributs requis
Un exemple illustratif d’utilisation
01/06/2016
121
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La nouvelle forme des fonctions asynchrones async/await
• Les classes CallerMemberName, CallerFilePath et CallerLineNumber
01/06/2016
122
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 6.0 Partie I
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
123
Formation Programmer en C# 6 alphorm.com™©
Plan• L’opérateur Nul ou « Elvis »
• La nouvelle présentation de la chaine formatée
• Les auto-initiateurs des propriétés
• L’expression « Nameof »
• Les imports statiques
01/06/2016
124
Formation Programmer en C# 6 alphorm.com™©
L’opérateur Nul ou « Elvis »
• Cet opérateur peut réduire le code en terme de quantité d’une manière efficace
Les versions précédentes C# La version C# 6.0
01/06/2016
125
Formation Programmer en C# 6 alphorm.com™©
La nouvelle présentation de la chaine formatée
• Les développeurs C# connaissent déjà la méthode « format » qui est utilisée pour représenter une chaine de caractères sous une forme personnalisée
• La méthode format pourra être substituée par le nouveau opérateur « $ »
La différence de techniques de formatage de chaines entre C#6.0 et les versions précédentes C#
01/06/2016
126
Formation Programmer en C# 6 alphorm.com™©
Les auto-initiateurs des propriétés
• Après la fonctionnalité des arguments optionnels introduite au niveau du C# 4.0 et qui donne une valeur par défaut aux arguments au niveau d’une méthode, les auto-initiateurs des propriétés permettent d’attribuer une valeur par défaut mais au niveau des propriétés cette fois-ci.
• Voici un exemple qui illustre le cas d’utilisation d’un auto-initiateur pour une propriété du type date :
01/06/2016
127
Formation Programmer en C# 6 alphorm.com™©
L’expression nameof
• L’opérateur « nameof » est nouveau dans C# 6.0, il permet de retourner le nom d’une variable bien évidement sous forme de chaine de caractères
• Dans les versions précédentes les développeurs sont obligés de passer par l’écriture des utilitaires pour arriver au même résultat atteint via l’opérateur «nameof»
L’une des méthodes utilisée précédemment
01/06/2016
128
Formation Programmer en C# 6 alphorm.com™©
L’expression nameof
• Ce pendant, il aura toujours une contrainte de point de vue performances en utilisant ces deux techniques
• L’opérateur « nameof » vient pour corriger ce défaut
Une autre technique en se basant sur la réflexion
01/06/2016
129
Formation Programmer en C# 6 alphorm.com™©
Les imports statiques
• Dans certains cas, l’utilisation des membres d’une classe statique est nécessaire
• L’appel des membres se fait alors selon la forme suivante
« Nom de classe » . « Nom du membre »
• Exemple :
01/06/2016
130
Formation Programmer en C# 6 alphorm.com™©
Les imports statiques
• C# 6.0 rend possible l’écriture suivante
• A condition d’ajouter la référence suivante au niveau des imports
01/06/2016
131
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• L’opérateur Null ou « Elvis »
• La nouvelle présentation de la chaine formatée
• Les auto-initiateurs des propriétés
• L’expression « Nameof »
• Les imports statiques
01/06/2016
132
Formation Programmer en C# 6 alphorm.com™©
Les fonctionnalités C# 6.0 Partie II
Le spectre d’évolution C#
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
133
Formation Programmer en C# 6 alphorm.com™©
Plan
• Les expressions « Bodied »
• Les initiateurs de dictionnaire
• Le block « finally » pour l’appel asynchrone « await »
• Les filtres d’exceptions
01/06/2016
134
Formation Programmer en C# 6 alphorm.com™©
Les expressions Bodied
• Les expressions Bodied permettent au
� Les propriétés
� Les fonctions à valeur de retour unique
� Les opérateurs
� Les indexeurs
d’avoir leurs valeurs relatives affectées sous forme des expressions lambda
• Le but étant toujours d’améliorer la qualité du code tout en prenant l’aspect performance en considération
01/06/2016
135
Formation Programmer en C# 6 alphorm.com™©
Les expressions Bodied
Quelques exemples des expressions « Bodied »
()
01/06/2016
136
Formation Programmer en C# 6 alphorm.com™©
Les initiateurs de dictionnaires
• Les initiateurs de dictionnaires permettent une nouvelle forme d’initiation encore beaucoup plus simple
01/06/2016
137
Formation Programmer en C# 6 alphorm.com™©
Le bloque finally pour l’appel asynchrone « await »
• La méthode d’appels asynchrones telle qu’elle est introduite en C# 5.0 utilise « async » et « await » pour appeler les services
• Au cas où une exception est levée, il est de bonne pratique d’imbriquer le code susceptible dans un bloque try … catch ….
• Parfois, il s’avère nécessaire d’exécuter des instructions quelque soit la situation en cas du déclenchement d’une exception ou pas
• Tel est le cas de libération des ressources, ou de connexion à une base de données
• Dans le cas du C# 5.0, il est nécessaire de libérer les ressources au niveau des deux bloques de code à savoir le bloque principal et le bloque d’exception
01/06/2016
138
Formation Programmer en C# 6 alphorm.com™©
Le bloque finally pour l’appel asynchrone « await »
• Dans le cas du C# 6.0 il devient possible de placer ce code dupliqué au niveau d’un bloque « finally »
La gestion du try … catch … en mode C#5.0 pour le cas du await
La gestion du try … catch … en mode C#6.0 pour le cas du await
01/06/2016
139
Formation Programmer en C# 6 alphorm.com™©
Les filtres d’exceptions
• Les filtres d’exceptions permettent de définir des conditions d’exécution de codes des scénarii alternatifs lors de la levée d’une exception
• Cela permet une gestion beaucoup
plus granulaire des situations qui
ont déclenché une ou plusieurs
exceptions
Une hiérarchie d’exceptions
01/06/2016
140
Formation Programmer en C# 6 alphorm.com™©
Les filtres d’exceptions
Exemple illustratif d’utilisation de filtres d’exceptions
01/06/2016
141
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Les expressions « Bodied »
• Les initiateurs de dictionnaire
• Le block « finally » pour l’appel asynchrone « await »
• Les filtres d’exceptions
01/06/2016
142
Formation Programmer en C# 6 alphorm.com™©
Présentation de .Net Framework 4.6
.Net Framework & .Net Core
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
143
Formation Programmer en C# 6 alphorm.com™©
Plan
• Présentation de la .Net Framework
• Introduction des nouveautés de la .Net Framework 4.6
01/06/2016
144
Formation Programmer en C# 6 alphorm.com™©
Présentation de la .Net Framework
• Le principal composant du .Net Framework pourra être considéré tout simplement comme une vaste collection de types managés qui sont répartis d’une manière hiérarchique sous forme d’espaces de noms qui représentent une sorte de conteneurs logiques pour ces types et pour d’autres espaces de noms aussi
Structure hiérarchique des principaux types prédéfinis au niveau du .Net Framework
01/06/2016
145
Formation Programmer en C# 6 alphorm.com™©
Présentation de la .Net Framework
• Cependant, côté physique il s’agit plutôt de DLL « Dynamic Library Link » ou « Assemblys » qui peuvent être considérés comme des fichiers de package
• Le deuxième majeur composant de la .Net Framework c’est le CLR « Le « Common Language Runtime » qui pourra être définit comme une petite machine virtuelle responsable d’exécution des programmes issus des codes managés
Code sourceItermediateLanguage
Exe ou DLL
01/06/2016
146
Formation Programmer en C# 6 alphorm.com™©
Présentation de la .Net Framework
C# VB C++ Autre
Compilation
Code en mode Intermediate Language
Just In Time
Code natif
Le CLR
Schéma illustratif de transformation du code écrit en code natif
01/06/2016
147
Formation Programmer en C# 6 alphorm.com™©
Présentation de la .Net Framework
• Le cœur de la .Net Framework réside dans l’Assembly nommé mscorlib.dll
• Cet Assembly contient les types prédéfinis qui traitent essentiellement :
� Le traitement des fichiers
� La sérialisation
� La réflexion
� Le Threading
� L’interopérabilité
L’assembly mscorlib.dll
01/06/2016
148
Formation Programmer en C# 6 alphorm.com™©
Présentation de la .Net Framework
• La couche supérieure du .Net Framework réside dans trois Assemblys à savoir :
� System.dll
� System.Core.dll
� System.Xml.dll
• Ces deux couches 1er et 2emme niveau constituent le noyau solide de la .Net Framework au dessus duquel les autres couches sont bâties
• Le reste des couches sont représentées sous forme d’interfaces applicatives plutôt que des composants essentiels de la .Net Framework
01/06/2016
149
Formation Programmer en C# 6 alphorm.com™©
Présentation de la .Net Framework
Présentation de la .Net Framework 4.6
01/06/2016
150
Formation Programmer en C# 6 alphorm.com™©
Présentation de la .Net Framework
• Le C# 6.0 cible essentiellement la .Net Framework 4.6 et 4.6.1
• Il est à noter que les applications qui tournent sous le CLR 4.6 peuvent aussi tourner sous le CLR 4.0 puisque ce premier n’est qu’une version « patchée » et non pas une mise à jour proprement dite
• Par conséquent, il n’aura pas
de soucis de compatibilité lors
de migration des anciennes
applications tournant sous
le CLR 4.0 vers le CLR 4.6 La précision de la .Net Framework Cible au niveau des propriétés du projet
01/06/2016
151
Formation Programmer en C# 6 alphorm.com™©
Introduction des nouveautés du .Net Framework 4.6
• L’adoption du protocole HTTP/2 ou le HTTP v2.0 qui est plus performant que le HTTP v1.1
• L’adoption du protocole « Token Binding Protocol » pour les applications qui tournent sous Windows 10 pour des conversations clients/serveurs plus sécurisés
• L’introduction d’un compilateur « Just In Time » en mode 64 bits encore plus performant
• L’introduction d’une nouvelle classe qui s’appelle AppContext au niveau de l’espace nom System.
• Cette classe AppContext offre aux auteurs de librairies un mécanisme flexible de changement entre différentes versions de ces librairies au niveau du code client
01/06/2016
152
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Présentation de la .Net Framework
• Introduction des nouveautés de la .Net Framework 4.6
01/06/2016
153
Formation Programmer en C# 6 alphorm.com™©
Présentation du .Net Core
.Net Framework & .Net Core
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
154
Formation Programmer en C# 6 alphorm.com™©
Plan
•Présentation du .Net Core
•DNX vs Mono
01/06/2016
155
Formation Programmer en C# 6 alphorm.com™©
Présentation du .Net Core
• C’est une implémentation réduite du .Net Framework
• C’est une version non payante et open source du .Net Framework, elle est téléchargeable à partir du site github sous le lien https://github.com/dotnet/core
• A la différence du .Net Framework, le .Net Core utilise une version du CLR « Common Language Runtime » appelée CoreCLR qui est une implémentation réduite du CLR qui est aussi indépendante de toute plateforme et architecture
• Le but étant de cibler les plateformes non Windows tel que Linux, Free BSD, MAC OS et bien d’autres plateformes et architectures tels que le ARM souvent utilisées pour le cas des appareils mobiles et les systèmes embarqués
01/06/2016
156
Formation Programmer en C# 6 alphorm.com™©
Présentation du .Net Core
• Le .Net Core n’implémente que :
� L’interface native de la console
� La couche applicative ASP.NET 5.0
• Il n’implémente pas :
� WPF
� WINFORMS
• Car ce sont des technologies qui dépendent des librairies natives de Windows, cependant, le but étant de viser bien d’autres plateformes
01/06/2016
157
Formation Programmer en C# 6 alphorm.com™©
Présentation du .Net Core
La structure de la nouvelle plateforme .Net
01/06/2016
158
Formation Programmer en C# 6 alphorm.com™©
Présentation du .Net Core
• Le .Net Core utilise le module CoreFx pour gérer les fonctionnalités principales telles que la gestion des entrées/sorties, XML, les collections
• Le .Net Core peut utiliser à présent le nouveau compilateur RyuJIT qui est un compilateur 64 bits beaucoup plus performant que le JIT
• RyuJIT fait une compilation pendant
une duré égale presque à 30 %
de la duré de compilation faite
par le JIT au pire des cas
Installation du RyuJIT
01/06/2016
159
Formation Programmer en C# 6 alphorm.com™©
Présentation du .Net Core
Une comparaison de performances entre le RyuJIT et JIT64 bits
01/06/2016
160
Formation Programmer en C# 6 alphorm.com™©
Présentation du .Net Core
• La structure du .Net Core est modulaire, c’est-à-dire on ne parle plus de Assemblys dans ce contexte mais plutôt de modules ou packages
• Dans ce cas, il va falloir installer le SDK DNX « Dot Net Execution » qui contient les utilitaires nécessaires pour installer, désinstaller et paqueter les packages .Net Core
• Même les Assemblys sont paquetés en cas de besoin pour être utilisés ensuite dans un contexte .Net Core
01/06/2016
161
Formation Programmer en C# 6 alphorm.com™©
DNX vs Mono
• Il y a pas mal de confusion entre les deux concepts. Pour cette raison il faut bien distinguer DNX et Mono
• Mono pourra être définit comme une plate-forme ouverte de développement. Elle est basée sur la spécification CLI « Common Language Infrastructure » qui comprend :
� Le Compilateur
� Le CLR « Common Language Runtime »
� Le BCL « Base Class Library »
� Le MCL « Mono Class Library »
01/06/2016
162
Formation Programmer en C# 6 alphorm.com™©
DNX vs Mono
• DNX peut être considéré comme un SDK et non pas comme une plateforme à part entière comme il est le cas pour Mono
• Le DNX est composé de trois modules essentiels
� L’environnement d’exécution DNX
� Le gestionnaire de versions DNVM
� Le gestionnaire des utilités DNU
contrôle utilise
La structure du DNX SDK
DNVM Le DNX runtime
DNUUtility
01/06/2016
163
Formation Programmer en C# 6 alphorm.com™©
DNX vs Mono
La structure de la nouvelle plateforme .Net
01/06/2016
164
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Présentation du .Net Core
• DNX vs Mono
01/06/2016
165
Formation Programmer en C# 6 alphorm.com™©
Installation et configuration du .Net Core
.Net Framework & .Net Core
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
166
Formation Programmer en C# 6 alphorm.com™©
Plan• Installation du .Net Core sous Ubuntu
01/06/2016
167
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Installation du .Net Core sous Ubuntu
01/06/2016
168
Formation Programmer en C# 6 alphorm.com™©
Installation et configuration du .Net Core
.Net Framework & .Net Core
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
169
Formation Programmer en C# 6 alphorm.com™©
Plan• Installation du DNVM pour ASP.NET Core sous Ubuntu
01/06/2016
170
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Installation du DNVM pour ASP.NET Core sous Ubuntu
01/06/2016
171
Formation Programmer en C# 6 alphorm.com™©
Installation d'un éditeur de code
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
.Net Framework & .Net Core
01/06/2016
172
Formation Programmer en C# 6 alphorm.com™©
Plan
• Installation et le choix d'un éditeur de code cas de Sublime Text 3
01/06/2016
173
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Installation d'un éditeur de code
� Atom
� Sublime Text 3
� Note pad ++
01/06/2016
174
Formation Programmer en C# 6 alphorm.com™©
Exemple de projet .Net Core
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
.Net Framework & .Net Core
01/06/2016
175
Formation Programmer en C# 6 alphorm.com™©
Plan
• Création du premier projet .Net Core sous Ubuntu
01/06/2016
176
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Création du premier projet .Net Core sous Ubuntu
01/06/2016
177
Formation Programmer en C# 6 alphorm.com™©
Présentation de Scriptcs
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
178
Formation Programmer en C# 6 alphorm.com™©
Plan
•Présentation Scriptcs Engine
•Présentation du REPL
01/06/2016
179
Formation Programmer en C# 6 alphorm.com™©
Présentation Scriptcs Engine
• Le Scriptcs Engine peut être considéré tout simplement comme un interpréteur du code C#
• Le code écrit en C# est normalement compilé en CIL « Common Intermediate Language » et puis « imité » en code natif par le JIT « Just In Time » pour qu’il puisse être traité par le système d’exploitation Windows
Code C# Code IL
Code natif
Compilé en
Interprétéen
01/06/2016
180
Formation Programmer en C# 6 alphorm.com™©
Présentation Scriptcs Engine
• Pour le cas de Scriptcs, il interprète le code C# en code natif, par conséquent, il n’y aura plus de besoin de génération d’Assemblys .exeet dlls pour construire et appeler les programmes écrits en C#
• Il suffit d’appeler le code à partir d’un simple fichier .csx, le Scriptcs Engine s’en occupe dans ce cas pour le mettre en exécution
• L’écriture du code devient alors indépendante de toutes sorte d’EDI« Environnement de développement Intégré » et du compilateur csc.exe
• L’exécution au niveau des plateformes non Windows devient aussi beaucoup plus simple et flexible
Code C#Code natifInterprété en
01/06/2016
181
Formation Programmer en C# 6 alphorm.com™©
Présentation Scriptcs Engine
• Le déploiement du code écrit sous forme de C# script se fait en terme de packages Nugget ou encore sous forme de modules pour le cas d’ajout d’extensions au Scriptcs lui même
Un exemple d’une collection de packages Nugget
01/06/2016
182
Formation Programmer en C# 6 alphorm.com™©
Présentation du REPL
• Comme tout environnement de script, il est nécessaire d’avoir un Shell pour appeler les scripts et exécuter leurs contenus
• Pour le cas des scripts C#, en parle du REPL «Read Eval Print Loop »
• Le REPL est exécuté à partir d’une invite de commande simple
L’environnement d’exécution des scripts C# ou le REPL
01/06/2016
183
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
•Présentation Scriptcs Engine
•Présentation du REPL
01/06/2016
184
Formation Programmer en C# 6 alphorm.com™©
Installation de Scriptcs sous Windows
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
185
Formation Programmer en C# 6 alphorm.com™©
Plan
• Installation de Scriptcs sous Windows
01/06/2016
186
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Installation de Scriptcs sous Windows
01/06/2016
187
Formation Programmer en C# 6 alphorm.com™©
Installation de Scriptcs sous Linux
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
188
Formation Programmer en C# 6 alphorm.com™©
Plan
• Installation de Scriptcs sous Linux Ubuntu
01/06/2016
189
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Installation de Scriptcs sous Linux Ubuntu
01/06/2016
190
Formation Programmer en C# 6 alphorm.com™©
Installation d’un éditeur de code pour Windows
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
191
Formation Programmer en C# 6 alphorm.com™©
Plan
• Installation d’un éditeur de code pour Windows Server 2012 R2
01/06/2016
192
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Installation d’un éditeur de code pour Windows Server 2012 R2
01/06/2016
193
Formation Programmer en C# 6 alphorm.com™©
Appel d'un script C#
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
194
Formation Programmer en C# 6 alphorm.com™©
Plan
•Appel d'un script C# à partir d’un fichier .csx
01/06/2016
195
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
•Appel d'un script C# à partir d’un fichier .csx
01/06/2016
196
Formation Programmer en C# 6 alphorm.com™©
Débogage d'un script C#
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
197
Formation Programmer en C# 6 alphorm.com™©
Plan
•Le débogage d’un C# script
01/06/2016
198
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
•Le débogage d’un C# script
01/06/2016
199
Formation Programmer en C# 6 alphorm.com™©
Référencement d'un script C#
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
200
Formation Programmer en C# 6 alphorm.com™©
Plan
•Le référencement d’un script C# dans un autre script C#
01/06/2016
201
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
•Le référencement d’un script C# dans un autre script C#
01/06/2016
202
Formation Programmer en C# 6 alphorm.com™©
Utilisation du script cache
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
203
Formation Programmer en C# 6 alphorm.com™©
Plan
• L’utilisation du script cache pour augmenter la performance
01/06/2016
204
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• L’utilisation du script cache pour augmenter la performance
01/06/2016
205
Formation Programmer en C# 6 alphorm.com™©
L'appel d'un script VB Script
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
206
Formation Programmer en C# 6 alphorm.com™©
Plan
•L'appel d'un script VB Script à partir d’un script C#
01/06/2016
207
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
•L'appel d'un script VB Script à partir d’un script C#
01/06/2016
208
Formation Programmer en C# 6 alphorm.com™©
L'appel du Powershell
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
209
Formation Programmer en C# 6 alphorm.com™©
Plan
• L'appel d'une Powershell Command Let à partir d’un script C#
• L'appel d'un script Powershell personnalisé à partir d’un script C#
01/06/2016
210
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• L'appel d'une Powershell Command Let à partir d’un script C#
• L'appel d'un script Powershell personnalisé à partir d’un script C#
01/06/2016
211
Formation Programmer en C# 6 alphorm.com™©
La création d’un package Scriptcs
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
212
Formation Programmer en C# 6 alphorm.com™©
Plan
• La création d’un package Scriptcs
01/06/2016
213
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La création d’un package Scriptcs
01/06/2016
214
Formation Programmer en C# 6 alphorm.com™©
Le déploiement d’un package Scriptcs
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
215
Formation Programmer en C# 6 alphorm.com™©
Plan
• Le déploiement d’un package Scriptcs
01/06/2016
216
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Le déploiement d’un package Scriptcs
01/06/2016
217
Formation Programmer en C# 6 alphorm.com™©
La consommation d’un package Scriptcs
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
218
Formation Programmer en C# 6 alphorm.com™©
Plan
• Le consommation d’un package Scriptcs
01/06/2016
219
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Le consommation d’un package Scriptcs
01/06/2016
220
Formation Programmer en C# 6 alphorm.com™©
L’extension du Scriptcs avec les modules
Le Scriptcs
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
221
Formation Programmer en C# 6 alphorm.com™©
Plan
• La définition d’un module Scriptcs
• Ce que vous pouvez faire avec les modules
• L’extension du Scriptcs avec un module « un exemple d’initiation »
01/06/2016
222
Formation Programmer en C# 6 alphorm.com™©
La définition d’un module Scriptcs
• Un module est une fonctionnalité représentée sous une forme spéciale de package Scriptcs qui est non pas utilisée pour étendre votre code écrit en script C#, c’est-à-dire les scripts .csx mais qui étend l’environnement Scriptcs lui-même en temps de l'exécution.
• Le module scriptcs-engine-mono par exemple permet d’étendre le Scriptcs pour qu’il puisse intégrer l’environnement d’exécution mono au lieu du .Net CLR
• Les modules Scriptcs sont très puissants, cependant et selon « Glenn Block » l’inventeur de la notion de modules Scritpcs et membre de l’équipe du développement du projet Scriptcs. Les modules représentent un double tranchant, par conséquent, il ne faut pas en abuser
01/06/2016
223
Formation Programmer en C# 6 alphorm.com™©
Ce que vous pouvez faire avec les modules
• Introduire un nouveau moteur pour l'exécution des scripts, par exemple les moteurs Roslyn , Mono et FSharp sont tous déployés en tant que modules.
• Enregistrer des processeurs de ligne « Line Processors » personnalisés.
• Remplacer le préprocesseur de fichiers « File PreProcessor » actuel avec un qui est dérivé et qui effectue une analyse syntaxique spéciale du script C#.
• L'introduction d'un hôte de script « Script Host » personnalisé
• Remplacer le système de fichiers avec une implémentation alternative, tel que « Azure Blob Storage » par exemple.
• Créer une nouvelle commande au niveau du REPL
01/06/2016
224
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La définition d’un module Scriptcs
• Ce que vous pouvez faire avec les modules
• L’extension du Scriptcs avec un module « un exemple d’initiation »
01/06/2016
225
Formation Programmer en C# 6 alphorm.com™©
Présentation du compilateur Roslyn Partie I
Le Roslyn
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
226
Formation Programmer en C# 6 alphorm.com™©
Plan
• Introduire le compilateur Roslyn
• Comprendre l’architecture du compilateur Roslyn
01/06/2016
227
Formation Programmer en C# 6 alphorm.com™©
Introduire le compilateur Roslyn
• C’est un nouveau compilateur, entièrement écrit en C #. Ce compilateur a pour but de développer :
� Les outils de Refactoring personnalisés
� Les éditeurs avec coloration syntaxique et la complétion du code
� Les plugins Visual Studio personnalisés
• Le Roslyn est introduit aussi dans un contexte stratégique de longue halène :
� Préparer et consolider la terrasse pour la nouvelle génération des compilateurs dites « Compiler as service »
� Etendre la plateforme .Net sur les autres environnements essentiellement non Windows
01/06/2016
228
Formation Programmer en C# 6 alphorm.com™©
Introduire le compilateur Roslyn
• Le code source de Roslyn est « open source » sous la licence Apache
• Il est téléchargeable à partir du :
� Site github: https://github.com/dotnet/roslyn
� Site codeplex: https://roslyn.codeplex.com/
• Les Assemblies qui composent la bibliothèque Roslyn sont :
� Microsoft.CodeAnalysis.dll
� Microsoft.CodeAnalysis.Csharp.dll
� System.Collections.Immutable.dll
� System.Reflection.Metadata.dll
01/06/2016
229
Formation Programmer en C# 6 alphorm.com™©
Introduire le compilateur Roslyn
• L'architecture Roslyn sépare la compilation en trois phases principales :
� Analyser le code écrit en C#
� Convertir le code écrit en symboles et résoudre le lien vers les dépendances
� Emmiter le résultat de conversion vers les Assemblies
• Le test du code est réalisé au niveau d’une instance de Visual Studio expérimentale
Instance de Visual Studio expérimentale
01/06/2016
230
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Introduire le compilateur Roslyn
• Comprendre l’architecture du compilateur Roslyn
01/06/2016
231
Formation Programmer en C# 6 alphorm.com™©
Présentation du compilateur Roslyn Partie II
Le Roslyn
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
232
Formation Programmer en C# 6 alphorm.com™©
Plan
• Les arbres de syntaxe
• La compilation sous Roslyn
• Les modèles sémantiques sous Roslyn
01/06/2016
233
Formation Programmer en C# 6 alphorm.com™©
Les arbres de syntaxe
• Un arbre de syntaxe pourra être considéré comme une structure DOM« Document Object Model » utilisée pour représenter le code source
• Un arbre peut contenir :
� Des objets du type Nœuds
� Des objets du type Tokens
� Des objets du type Trivias
� Des objets du type Spans
� Des objets du type Kinds
� Des objets du type ErrorsImage d’une arbre de syntaxe
prise de MSDN
01/06/2016
234
Formation Programmer en C# 6 alphorm.com™©
Les arbres de syntaxe (Les nœuds)
• Les nœuds de syntaxe sont les principaux éléments des arbres de syntaxe
• Ces nœuds représentent des constructions syntaxiques telles que les:
� Déclarations (les noms de variables, les noms de fonctions, les noms de classes ….)
� Expressions ( ()=>,_=>,= …)
� Clauses ou Tokens (if, else, for, while, using, class, struct ….)
• Les nœuds de syntaxe admettent toujours des nœuds enfants représentés par la collection Descendant* et un nœud parent représenté par Parent sauf le nœud racine qui n’a pas de nœud parent
• Chaque type de nœud est représenté par une classe appropriée qui hérite de la classe SyntaxNode
01/06/2016
235
Formation Programmer en C# 6 alphorm.com™©
Les arbres de syntaxe (Les Tokens)
• Les Tokens sont les :
� Mots clés
� Les identificateurs
� Les littéraux
� Les ponctuations
• Les Tokens sont caractérisés par le fait qu’ils ne peuvent pas être parents des autres nœuds ou des autres Tokens
• Les Tokens sont représentés par la structure SyntaxToken
01/06/2016
236
Formation Programmer en C# 6 alphorm.com™©
Les arbres de syntaxe (Les Trivias)
• Les Trivias représentent
� Les espaces
� Les commentaires
� Les directives (#define,#pragma,#tryf…..)
• Au début, les Trivias n’étaient pas incluses dans l’arbre de syntaxe, elles sont ajoutées par la suite vu leurs importance dans la phase de Refactoring du code
• Les Trivias n’admettent pas de parents, elles sont représentées par la structure SyntaxTrivia
01/06/2016
237
Formation Programmer en C# 6 alphorm.com™©
Les arbres de syntaxe (Les Spans)
• Les Spans représentent les positions des nœuds dans le code source et le nombre de caractères formant ces nœuds
• La position et la longueur est représentée par des entiers
• Chaque nœud représente deux types de Spans :
� Span
� FullSpan qui diffère du Span en comptant les Trivias
01/06/2016
238
Formation Programmer en C# 6 alphorm.com™©
Les arbres de syntaxe (Les Kinds)
• Les Kinds sont stockés dans l’énumération SyntaxKind
• Ils représentent les types des nœuds
• Chaque nœud représente la propriété RawKind qui à son tour représente son type
01/06/2016
239
Formation Programmer en C# 6 alphorm.com™©
La compilation sous Roslyn
• Une compilation est composée de :
� Code source
� Les références aux Assemblies nécessaires
� Les options de compilation
• Une compilation transforme chaque élément de code en symbole, le symbole représente un ensemble d’informations que nécessite le compilateur sur un nœud :
� L’emplacement
� L’espace nom et le type
� La signature (abstract, static, public, sealed …)
01/06/2016
240
Formation Programmer en C# 6 alphorm.com™©
La compilation sous Roslyn
• Les Symboles sont représentés par des classes qui implémentent les interfaces :
� ISymbol pour les propriétés, les variables et les champs
� IMethodSymbol pour les procédures et les fonctions
• Les compilations sont immutables tout à fait comme les arbres de syntaxe, elles sont représentées par la classe CSharpCompilation qui hérite à son tour de la classe Compilation
• La méthode Create est utilisée dans ce cas pour créer une compilation à partir d’un arbre de syntaxe.
01/06/2016
241
Formation Programmer en C# 6 alphorm.com™©
Les modèles sémantiques Roslyn
• Un modèle sémantique représente les informations sémantiques pour un seul fichier source tel que
� Les erreurs et les avertissements qui peuvent être générés
� Les diagnostiques
� Les informations relatives aux symboles
• Les modèles sémantiques sont représentés par la classe SemanticModel
• Les modèles sémantiques peuvent répondre à toutes les questions difficiles de compilation qu’un développeur pourra avoir
01/06/2016
242
Formation Programmer en C# 6 alphorm.com™©
Les modèles sémantiques Roslyn
• Un modèle sémantique est coûteux en terme de performances en le comparant à un arbre de syntaxe
• Un modèle sémantique est utilisé pour analyser le code en profondeur contrairement à un arbre syntaxique
• Le modèle sémantique constitue le véritable pont entre la syntaxe et les symboles
• En effet, les méthodes GetDeclaredSymbol et GetSymbolInfo de la classe SemanticModel permet d’avoir un symbole à partir d’une expression syntaxique
01/06/2016
243
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Les arbres de syntaxe
• La compilation sous Roslyn
• Les modèles sémantiques sous Roslyn
01/06/2016
244
Formation Programmer en C# 6 alphorm.com™©
Présentation du compilateur Roslyn Partie III
Roslyn
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
245
Formation Programmer en C# 6 alphorm.com™©
Plan
• Introduction de la notion espace de travail Workspace
• Le premier pas vers Roslyn
01/06/2016
246
Formation Programmer en C# 6 alphorm.com™©
Introduction de la notion espace travail Workspace
• La notion Workspace est le point de départ pour faire l'analyse du code et du Refactoring en terme de solutions complètes
• C’est une notion très utile surtout pour écrire des extensions qui visent le TFS « Team Foundation Server » , la solution de collaboration relative à Visual Studio permettant la gestion des solutions, projets et le suivi des éléments de travail, la planification, la gestion de projet en terme de cycle de vie et l'analyse des performances.
• L’espace de travail est une API qui permet l'organisation de toutes les informations sur les projets dans une solution dans le modèle d'objet unique
• Elle offre un accès direct à des modèles d'objets comme, les arbres de syntaxe, les modèles sémantiques et compilations
01/06/2016
247
Formation Programmer en C# 6 alphorm.com™©
Introduction de la notion espace noms namespace
• Une solution est considérée comme un modèle immutable des projets et des documents.
• Après avoir obtenu une instance de solution de la propriété WorkspaceSolution, cette instance est immutable
• Il est possible de modifier des solutions en construisant de nouvelles instances basées sur des solutions existantes et des changements spécifiques tout à fait comme les arbres de syntaxes.
• Un projet est considéré comme une partie de la solution immutable.
• Il représente tous les documents de base de code, d’analyses, d’options de compilation et les références projet-à-projet.
• Un document est considéré comme une partie du projet
01/06/2016
248
Formation Programmer en C# 6 alphorm.com™©
Introduction de la notion espace noms namespace
• Un document représente une fichier du code source ou de configuration
Une représentation structurelle
d’un espace de travail
Espace de Travail
Solution Solution N
Solution N
Solution N
Solution N
ProjetProjetProjetProjetProjet N
DocumentDocumentDocumentDocumentDocument N
01/06/2016
249
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Introduction de la notion espace de travail Workspace
• Le premier pas vers Roslyn
01/06/2016
250
Formation Programmer en C# 6 alphorm.com™©
Exploration et analyse des arbres de syntaxes
Roslyn
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
251
Formation Programmer en C# 6 alphorm.com™©
Plan
• Exploration et analyse des arbres de syntaxes
01/06/2016
252
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Exploration et analyse des arbres de syntaxes
01/06/2016
253
Formation Programmer en C# 6 alphorm.com™©
Exploration et analyse des modèles sémantiques
Roslyn
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
254
Formation Programmer en C# 6 alphorm.com™©
Plan
• Exploration et analyse des modèles sémantiques
01/06/2016
255
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Exploration et analyse des modèles sémantiques
01/06/2016
256
Formation Programmer en C# 6 alphorm.com™©
Exploration et analyse des espaces de travail
Roslyn
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
257
Formation Programmer en C# 6 alphorm.com™©
Plan
• Exploration et analyse des espaces de travail
01/06/2016
258
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Exploration et analyse des espaces de travail
01/06/2016
259
Formation Programmer en C# 6 alphorm.com™©
Extension Visual StudioCas du Code Refactoring (VSIX)
Roslyn
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
260
Formation Programmer en C# 6 alphorm.com™©
Plan
• Comprendre le mécanisme du code Refactoring (VSIX)
01/06/2016
261
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Comprendre le mécanisme du code Refactoring
01/06/2016
262
Formation Programmer en C# 6 alphorm.com™©
Extension Visual StudioCas du
Analyzer with Code Fix
Roslyn
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
263
Formation Programmer en C# 6 alphorm.com™©
Plan
• Comprendre le mécanisme du Analyzer with Code Fix
01/06/2016
264
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Comprendre le mécanisme du Analyzer with Code Fix
01/06/2016
265
Formation Programmer en C# 6 alphorm.com™©
Programmation C# 6.0 en Cloud
C# 6.0 et le Cloud
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
266
Formation Programmer en C# 6 alphorm.com™©
Plan
• Présentation de la notion Cloud et Cloud Stack
• Programmation C# en mode Cloud
• Introduction de la notion Cloud patterns
01/06/2016
267
Formation Programmer en C# 6 alphorm.com™©
Présentation de la notion Cloud et Cloud Stack
• Le Cloud ou nuage est tout simplement une grande unité de matériels informatiques (banalisées) qui fonctionne au niveau d'un centre de données qui existe à un coin donné au niveau du monde
• Le but derrière cette structure est :
� Exécuter des programmes
� Fournir des services
� Stocker des quantités importantes de données
Le cloud computing
01/06/2016
268
Formation Programmer en C# 6 alphorm.com™©
Présentation de la notion Cloud et Cloud Stack
• Le « Cloud Stack» ou la pile de « Cloud » est composée de plusieurs composants et infrastructures ordonnées selon une structure verticale composée d’une ou des
• Infrastructure(s) : « Infrastructure as a Service » ou IaaS . Par analogie à un PC, elle est comparée au matériel informatique
• Plateforme(s) : « Platform as a Service » ou PaaS . Par analogie à un PC, elle est comparée au système d’exploitation et les programmes orientés services ou « B to B »
• Application(s) : « Software as a Service » ou SaaS c’est l’ensemble des programmes offerts au niveau du « Cloud » pour être consommés par les utilisateurs finaux comme l’ application Office 365
01/06/2016
269
Formation Programmer en C# 6 alphorm.com™©
Programmation C# en mode « Cloud »
• La programmation « Cloud » est le développement d’une logique de code donné qui pourra cibler les deux niveaux du nuage à savoir PaaS et le SaaS
• La programmation en Cloud devrait prendre en considération la portabilité, l'évolutivité et surtout préserver les performances et la stabilité des programmes écrits.
• Ils existent plusieurs fournisseurs Cloud tel que Google, Amazon, Azure …
• Pour programmer des applications orientées Cloud pour l’infrastructure « Amazon Cloud», Amazon offre la SDK « AWS SDK for .Net »https://aws.amazon.com/sdk-for-net/
01/06/2016
270
Formation Programmer en C# 6 alphorm.com™©
Programmation C# en mode Cloud
• Pour programmer des applications orientées Cloud pour l’infrastructure Google Cloud, Google offre la SDK « Google Cloud SDK for .Net »https://cloud.google.com/sdk/
• Pour programmer des applications orientées Cloud pour l’infrastructure « Windows Azure » qui est le Cloud Microsoft, il faut créer un compte Azure et ouvrir une session à partir de https://manage.windowsazure.com
• La création de compte Azure se fait selon deux modes à savoir :
� Le mode payant
� Le mode d’essai gratuit un mois
01/06/2016
271
Formation Programmer en C# 6 alphorm.com™©
Programmation C# en mode « Cloud »
• Les services offerts qui peuvent être concernés par le développement Cloud sous « Windows Azure » sont principalement :
� Les données au niveau des bases de données
� Les fichiers stockés
� Les services et des applications en terme d’hébergement et déploiement
• La gestion des programmes pourrait être faite à travers l’interface de gestion centralisée « Azure Management Studio » téléchargeable à partir de ce lien http://www.cerebrata.com/
01/06/2016
272
Formation Programmer en C# 6 alphorm.com™©
Introduction de la notion « Cloud patterns »
• Les « Cloud Design Patterns » est un sous ensemble de design patterns qui vise à adopter les bonnes pratiques en terme de qualité de code
• Autre que le sens organisationnel, les « Cloud Design Patterns » mettent l’accent sur d’autres aspects importants surtout dans un contexte distribué tel que la performance, la disponibilité, la sécurité et bien d’autres aspects importants
• A ce stade, il s’avère constructif d’introduire quelques patterns dans ce contexte en se contentant des descriptions de ces patterns, cependant, les implémentations vues leurs détails importants, elles ne seront pas traitées au niveau de cette présentation.
01/06/2016
273
Formation Programmer en C# 6 alphorm.com™©
Introduction de la notion « Cloud patterns »
� Le Retry pattern : Ce pattern permet la relance d’une nouvelle requête après la levée d’une exception ou une erreur au niveau du service « Cloud »
� Le Throttling pattern : Permet d’optimiser la qualité d’exécution en cas de charge importante
� Le Circuit Breaker pattern : Permet de découvrir l’état d’un service ou application « Cloud » avant de lancer une requête vers cette dernière
� Le Valet Key pattern : Utilisé dans le cas d’échange des fichiers de taille importante de et vers le « Cloud »
� Le Sharding pattern : Permet de décomposer les données au niveau d’une table en mode horizontal sous forme de partitions ou Shards, le but étant d’optimiser les performances en terme de recherches des données
� Le CQRS pattern : Permet la séparation des commandes de requêtes des autres commandes d’ajout, suppression et mise à jour de données
01/06/2016
274
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Présentation de la notion Cloud et Cloud Stack
• Programmation C# en mode cloud
• Introduction de la notion « Cloud patterns »
01/06/2016
275
Formation Programmer en C# 6 alphorm.com™©
La réflexion
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
276
Formation Programmer en C# 6 alphorm.com™©
Plan
•La création d’une classe attribut personnalisée
01/06/2016
277
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
•La création d’une classe attribut personnalisée
01/06/2016
278
Formation Programmer en C# 6 alphorm.com™©
La sérialisationavancée
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
279
Formation Programmer en C# 6 alphorm.com™©
Plan
• La création d’un type « Serializer » personnalisé
01/06/2016
280
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La création d’un type « Serializer » personnalisé
01/06/2016
281
Formation Programmer en C# 6 alphorm.com™©
La sérialisationavancée
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
282
Formation Programmer en C# 6 alphorm.com™©
Plan
• La création d’un type « Serializer » personnalisé
� Pourquoi avoir recourt à un « Serializer » personnalisé
� Mécanisme de sérialisation du « Serializer » personnalisé
� Exploration de l’implémentation
01/06/2016
283
Formation Programmer en C# 6 alphorm.com™©
Mécanisme de sérialisation du « Serializer » personnalisé
Custom Serializer
ObjectGraph
Persisté
TypeFormat
Mode Stockage
3.Prend
1.Prend 2.Prend
4.Transforme& persiste
Processus de sérialisation
01/06/2016
284
Formation Programmer en C# 6 alphorm.com™©
Mécanisme de sérialisation du « Serializer » personnalisé
Custom Serializer
Fichier
GraphExtrait
+Construction de
L’objetdynamiquement
TypeFormat
Mode Stockage
3.Prend
1.Prend 2.Prend
4.Transforme& persiste
Processus de desérialisation
01/06/2016
285
Formation Programmer en C# 6 alphorm.com™©
Mécanisme de sérialisation du « Serializer » personnalisé
• L’interface IFormat
01/06/2016
286
Formation Programmer en C# 6 alphorm.com™©
Mécanisme de sérialisation du « Serializer » personnalisé
• La classe Nœud
01/06/2016
287
Formation Programmer en C# 6 alphorm.com™©
Mécanisme de sérialisation du « Serializer » personnalisé
• La classe StorageModeAttribute
01/06/2016
288
Formation Programmer en C# 6 alphorm.com™©
Mécanisme de sérialisation du « Serializer » personnalisé
• La classe FormatAttribute
01/06/2016
289
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La création d’un type « Serializer » personnalisé
� Pourquoi avoir recourt à un « Serializer » personnalisé
� Mécanisme de sérialisation du « Serializer » personnalisé
� Exploration de l’implémentation
01/06/2016
290
Formation Programmer en C# 6 alphorm.com™©
La programmation dynamique
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
291
Formation Programmer en C# 6 alphorm.com™©
Plan
• Etendre une classe non dynamique au temps d’exécution
01/06/2016
292
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Etendre une classe non dynamique au temps d’exécution
01/06/2016
293
Formation Programmer en C# 6 alphorm.com™©
Le Threading
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
294
Formation Programmer en C# 6 alphorm.com™©
Plan
• La création d’un multi thread Crawler
01/06/2016
295
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La création d’un multi thread Crawler
01/06/2016
296
Formation Programmer en C# 6 alphorm.com™©
Interopérabilité
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
297
Formation Programmer en C# 6 alphorm.com™©
Plan
• La communication entre une application .net C# et une carte électronique programmable à base de AVR Atmega 16
01/06/2016
298
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La communication entre une application .net C# et une carte électronique programmable à base de AVR Atmega 16
01/06/2016
299
Formation Programmer en C# 6 alphorm.com™©
Bases de données
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
300
Formation Programmer en C# 6 alphorm.com™©
Plan
• La connexion à une base de donnée MySQL cas d’une application Console cas basé sur ADO.NET
• Création d’une application MVC5 basée sur MySQL cas basé sur EntityFramework 6
01/06/2016
301
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La connexion à une base de donnée MySQL cas d’une application Console cas basé sur ADO.NET
• Création d’une application MVC5 basée sur MySQL cas basé sur EntityFramework 6
01/06/2016
302
Formation Programmer en C# 6 alphorm.com™©
Les types
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
303
Formation Programmer en C# 6 alphorm.com™©
Plan
• L’implémentation du type matrice
01/06/2016
304
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• L’implémentation du type matrice
01/06/2016
305
Formation Programmer en C# 6 alphorm.com™©
Les collections
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
306
Formation Programmer en C# 6 alphorm.com™©
Plan
• La création d'une collection observable personnalisée
� Approche 1 cas d’implémentation des événements
� Approche 2 cas d’utilisation des attributs personnalisé
� Approche 3 cas d’implémentation du patron de conception observable
01/06/2016
307
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La création d'une collection observable personnalisée
� Approche 1 cas d’implémentation des événements
� Approche 2 cas d’utilisation des attributs personnalisé
� Approche 3 cas d’implémentation du patron de conception observable
01/06/2016
308
Formation Programmer en C# 6 alphorm.com™©
LINQ
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
309
Formation Programmer en C# 6 alphorm.com™©
Plan
• La création d’un fournisseur de LINQ personnalisé
� Les principaux Principes à tenir
� Les principaux liens à visiter
� Exploration et test d’un fournisseur Linq basique
01/06/2016
310
Formation Programmer en C# 6 alphorm.com™©
Les principaux Principes à tenir
• IQueryable
• IQueryProvider
01/06/2016
311
Formation Programmer en C# 6 alphorm.com™©
Les principaux Principes à tenir
• Les expressions
01/06/2016
312
Formation Programmer en C# 6 alphorm.com™©
Les principaux liens à visiter
• Un exemple pas à pas qui n’est pas fonctionnel fournit par MSDN, et il n’est pas mis à jour!
https://msdn.microsoft.com/en-us/library/bb546158(v=vs.110).aspx
• Les expressions
https://msdn.microsoft.com/fr-fr/library/ms173144.aspx
• Pour comprendre comment implémenter un visiteur d’arborescence
https://msdn.microsoft.com/fr-fr/library/bb882521(v=vs.90).aspx
Pour accélérer votre le développement d’un fournisseur de LINQ personnalisé
https://github.com/re-motion/Relinq
01/06/2016
313
Formation Programmer en C# 6 alphorm.com™©
Les principaux liens à visiter
• Un lien vers un diagramme qui décrit le principe de fonctionnement de LINQ to SQL
http://www.devbible.com/UserFiles/1483901625/1166729295.jpg
01/06/2016
314
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• La création d’un fournisseur de LINQ personnalisé
� Les principaux Principes à tenir
� Les principaux liens à visiter
� Exploration et test d’un fournisseur Linq basique
01/06/2016
315
Formation Programmer en C# 6 alphorm.com™©
Scriptcs
Les études de cas
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
316
Formation Programmer en C# 6 alphorm.com™©
Plan
• Exploration et test d’un package Scriptcs cas de SQLTOXMLJSON
01/06/2016
317
Formation Programmer en C# 6 alphorm.com™©
Ce qu’on a couvert
• Exploration et test d’un package Scriptcs cas de SQLTOXMLJSON
01/06/2016
318
Formation Programmer en C# 6 alphorm.com™©
Le Bilan
Le mot de la fin
Site : http://www.alphorm.comBlog : http://blog.alphorm.com
Béchir BEJAOUIFormateur et Consultant indépendant spécialisé en technologie et systèmes d’informations
01/06/2016
319
Formation Programmer en C# 6 alphorm.com™©
Le bilan
• Cinq chapitres
� Spectre d’évolution C# à partir de la version 2.0 jusqu’à la version 6.0
� Le .Net Framework 4.6 & .Net Core version 1.0
� Le Scriptcs
� Le Roslyn
� Le C# et le Cloud, une introduction de la programmation Cloud
� Des études de cas sous forme de projets C#
01/06/2016
320
Formation Programmer en C# 6 alphorm.com™©
Vos questions & remarques
• Vos questions et remarques sont les bienvenues sur
Mon compte Linked In:
http://tn.linkedin.com/in/bejaoui-06b2452b
Mon groupe C# sur Facebook:
http://www.facebook.com/groups/937775196280145/
Mon mail:
� me780411@gmail.com
Recommended