Alphorm.com support de la formation programmer en C# 6

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