Vous êtes sur la page 1sur 160

Alphorm.

com-Support de la 01/06/2016
Formation Programmer en C# 6

Formation
C# 6.0
Avancée
Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 1
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

Mes formations sur Alphorm

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 2
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 3
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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#

Formation Programmer en C# 6 alphorm.com™©

Liens utiles
• Un lien vers mes articles

http://www.c-sharpcorner.com/members/bechir-bejaoui2

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 4
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Liens utiles
• Un lien vers mon groupe Facebook C#

http://www.facebook.com/groups/csharp.programming/

Formation Programmer en C# 6 alphorm.com™©

Liens utiles
• Un lien vers mon groupe ma chaine Youtube

http://www.youtube.com/user/margoumix

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 5
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Are You ready ? ☺

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 2.0 Partie I

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 6
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Les types Génériques

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.

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 7
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les types génériques


• Voici à présent un exemple d’utilisation des types génériques :

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 8
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Les types Génériques

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 2.0 Partie II

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 9
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Les types Nullables

• Les itérateurs

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 10
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Les types Nullables

• Les itérateurs

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 11
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le spectre d’évolution C#
Les fonctionnalités
C# 2.0 Partie III

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Les classes partielles

• Les classes statiques

• Les méthodes anonymes

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 12
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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


Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 13
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Les classes partielles

• Les classes statiques

• Les méthodes anonymes

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 14
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le spectre d’évolution C#
Les fonctionnalités
C# 3.0 Partie I

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Les initiateurs d’objets

• Les initiateurs de collections

• Les types implicites

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 15
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 La forme des initiateurs


précédemment en mode C# 3.0

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


Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 16
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 variable La définition de la même


locale anonyme variable en mode CIL

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


Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 17
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Les initiateurs d’objets

• Les initiateurs de collections

• Les types implicites

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 3.0 Partie II

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 18
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Les méthodes extensions

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


Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 19
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 namespace
diffé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
Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Les méthodes extensions

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 20
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le spectre d’évolution C#
Les fonctionnalités
C# 3.0 Partie III

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Le LINQ

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 21
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 » ….

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 22
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Le LINQ

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 3.0 Partie IV

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 23
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Le LINQ to SQL

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Le LINQ to SQL

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 24
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le spectre d’évolution C#
Les fonctionnalités
C# 3.0 Partie IV

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Le LINQ to Entities

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 25
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Le LINQ to Entities

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 3.0 Partie V

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 26
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Le LINQ to XML

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Le LINQ to XML

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 27
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le spectre d’évolution C#
Les fonctionnalités
C# 3.0 Partie VI

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• La jointure en mode LINQ

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 28
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• La jointure en mode LINQ

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 3.0 Partie VII

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 29
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Les expressions Lambda

• Les méthodes partielles

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
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 30
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 »

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 31
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Les expressions Lambda

• Les méthodes partielles

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 4.0 Partie I

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 32
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• La programmation dynamique

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
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 33
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 Binder
sont 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

Formation Programmer en C# 6 alphorm.com™©

La programmation dynamique

C# VB.NET

Dynamic Language
Runtime .Net
Expression CallSite
Tree <T>

DOM
Common Language Script
Runtime Binder Engines

Position du DLR dans la plateforme .Net


Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 34
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• La programmation dynamique

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 4.0 Partie II

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 35
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• La programmation dynamique

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• La programmation dynamique

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 36
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le spectre d’évolution C#
Les fonctionnalités
C# 4.0 Partie III

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• La programmation dynamique

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 37
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Définition du Identique quant à la définition Identique quant à la


code d’un objet classique 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
Tableau comparatif entre l’utilisation d’un dictionnaire et un
ExpandoObejct

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 38
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

La programmation dynamique

Comportement Implémente l’interface N’implémente pas l’interface


INotifyPropertyChanged INotifyPropertyChanged
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)

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 39
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

La programmation dynamique
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
Les méthodes à implémenter de l’objet dynamique
en cas d’utilisation de DynamicObject

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 40
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• La programmation dynamique

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 4.0 Partie IV

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 41
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Les paramètres optionnels

• Les arguments nommés

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


Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 42
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

Les 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

Exemple de définition des arguments nommés

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 43
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Les paramètres optionnels

• Les arguments nommés

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 4.0 Partie V

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 44
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• La variance des génériques

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 A
tout 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.

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 45
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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


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>

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 46
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• La variance des génériques

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 4.0 Partie VI

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 47
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• La classe Task

• La gestion des exceptions issues de Task

• L’annulation de Task

• La programmation parallèle

• Nouvelles collections supportant la multithreading

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 48
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 classe
System.Threading.Tasks.Task<TResult>, qui hérite de Task.

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é.

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 49
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

La gestion des exceptions issues de Task

La gestion de l’erreur dans un contexte task

Une méthode à déclenchement


potentiel d’erreur
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 50
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

La gestion des exceptions issues de Task

La gestion de l’erreur dans un contexte task


Une alternative qui utilise la prédicat
Une méthode à déclenchement Handle de l’exception AgregateException
potentiel d’erreur
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
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 51
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

L’annulation de Task

La structure CancellationToken

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 52
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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ément
un 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 une
méthode nommée ou fournit un code Inline.

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 53
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 .

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 54
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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.

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 55
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le spectre d’évolution C#
Les fonctionnalités
C# 5.0

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• La nouvelle forme des fonctions asynchrones async/await

• Les classes CallerMemberName, CallerFilePath et CallerLineNumber

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 56
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 57
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 58
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les fonctions asynchrones

Exemple de définition de async /await

Formation Programmer en C# 6 alphorm.com™©

Les fonctions asynchrones

Exemple du code appelant

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 59
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 60
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• La nouvelle forme des fonctions asynchrones async/await

• Les classes CallerMemberName, CallerFilePath et CallerLineNumber

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#
Les fonctionnalités
C# 6.0 Partie I

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 61
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 62
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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#

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 :

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 63
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

L’expression nameof

Une autre technique en se basant sur la réflexion

• 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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 64
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 :

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 65
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

Le spectre d’évolution C#

Les fonctionnalités
C# 6.0 Partie II

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 66
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Les expressions « Bodied »

• Les initiateurs de dictionnaire

• Le block « finally » pour l’appel asynchrone « await »

• Les filtres d’exceptions

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 67
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les expressions Bodied

()

Quelques exemples des expressions « Bodied »


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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 68
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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 La gestion du try … catch … en


mode C#5.0 pour le cas du await mode C#6.0 pour le cas du await
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 69
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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


Formation Programmer en C# 6 alphorm.com™©

Les filtres d’exceptions

Exemple illustratif d’utilisation de filtres d’exceptions


Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 70
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Les expressions « Bodied »

• Les initiateurs de dictionnaire

• Le block « finally » pour l’appel asynchrone « await »

• Les filtres d’exceptions

Formation Programmer en C# 6 alphorm.com™©

.Net Framework & .Net Core

Présentation de
.Net Framework 4.6

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 71
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Présentation de la .Net Framework

• Introduction des nouveautés de la .Net Framework 4.6

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


Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 72
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Itermediate
Code source Exe ou DLL
Language

• 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

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 Le CLR

Code natif

Schéma illustratif de transformation du code écrit en code natif


Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 73
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 74
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Présentation de la .Net Framework

Présentation de la .Net Framework 4.6

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
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 75
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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
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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 76
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

.Net Framework & .Net Core

Présentation
du .Net Core

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Présentation du .Net Core

• DNX vs Mono

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 77
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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
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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 78
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Présentation du .Net Core

La structure de la nouvelle plateforme .Net


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
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 79
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Présentation du .Net Core

Une comparaison de performances entre le RyuJIT et JIT64 bits


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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 80
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 »

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

DNVM Le DNX DNU


runtime Utility
contrôle utilise
La structure du DNX SDK

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 81
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

DNX vs Mono

La structure de la nouvelle plateforme .Net

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Présentation du .Net Core

• DNX vs Mono

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 82
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

.Net Framework & .Net Core


Installation et configuration
du .Net Core

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Installation du .Net Core sous Ubuntu

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 83
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Installation du .Net Core sous Ubuntu

Formation Programmer en C# 6 alphorm.com™©

.Net Framework & .Net Core


Installation et configuration
du .Net Core

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 84
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Installation du DNVM pour ASP.NET Core sous Ubuntu

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Installation du DNVM pour ASP.NET Core sous Ubuntu

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 85
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

.Net Framework & .Net Core


Installation d'un
éditeur de code

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Installation et le choix d'un éditeur de code cas de Sublime Text 3

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 86
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Installation d'un éditeur de code
Atom
Sublime Text 3
Note pad ++

Formation Programmer en C# 6 alphorm.com™©

.Net Framework & .Net Core


Exemple de projet
.Net Core

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 87
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Création du premier projet .Net Core sous Ubuntu

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Création du premier projet .Net Core sous Ubuntu

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 88
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le Scriptcs
Présentation
de Scriptcs

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Présentation Scriptcs Engine

• Présentation du REPL

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 89
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 Code
Code C# Compilé
en
Interprété
en
IL natif

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 .exe
et 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
Code C# Interprété en natif

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 90
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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
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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 91
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Présentation Scriptcs Engine

• Présentation du REPL

Formation Programmer en C# 6 alphorm.com™©

Le Scriptcs
Installation de Scriptcs
sous Windows

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 92
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Installation de Scriptcs sous Windows

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Installation de Scriptcs sous Windows

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 93
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le Scriptcs
Installation de Scriptcs
sous Linux

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Installation de Scriptcs sous Linux Ubuntu

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 94
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Installation de Scriptcs sous Linux Ubuntu

Formation Programmer en C# 6 alphorm.com™©

Le Scriptcs
Installation d’un éditeur
de code pour Windows

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 95
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Installation d’un éditeur de code pour Windows
Server 2012 R2

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Installation d’un éditeur de code pour Windows
Server 2012 R2

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 96
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le Scriptcs
Appel d'un script C#

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Appel d'un script C# à partir d’un fichier .csx

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 97
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Appel d'un script C# à partir d’un fichier .csx

Formation Programmer en C# 6 alphorm.com™©

Le Scriptcs
Débogage d'un script
C#

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 98
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Le débogage d’un C# script

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Le débogage d’un C# script

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 99
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le Scriptcs
Référencement
d'un script C#

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Le référencement d’un script C# dans un autre
script C#

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 100
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Le référencement d’un script C# dans un autre
script C#

Formation Programmer en C# 6 alphorm.com™©

Le Scriptcs
Utilisation du script
cache

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 101
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• L’utilisation du script cache pour augmenter la performance

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• L’utilisation du script cache pour augmenter la performance

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 102
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le Scriptcs
L'appel d'un script
VB Script

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• L'appel d'un script VB Script à partir d’un script C#

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 103
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• L'appel d'un script VB Script à partir d’un script C#

Formation Programmer en C# 6 alphorm.com™©

Le Scriptcs
L'appel du Powershell

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 104
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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#

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#

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 105
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le Scriptcs
La création d’un package
Scriptcs

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• La création d’un package Scriptcs

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 106
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• La création d’un package Scriptcs

Formation Programmer en C# 6 alphorm.com™©

Le Scriptcs
Le déploiement d’un
package Scriptcs

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 107
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Le déploiement d’un package Scriptcs

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Le déploiement d’un package Scriptcs

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 108
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le Scriptcs
La consommation d’un
package Scriptcs

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Le consommation d’un package Scriptcs

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 109
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Le consommation d’un package Scriptcs

Formation Programmer en C# 6 alphorm.com™©

Le Scriptcs
L’extension du Scriptcs avec
les modules

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 110
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 »

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 111
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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
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 »

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 112
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le Roslyn
Présentation du
compilateur Roslyn Partie I

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Introduire le compilateur Roslyn

• Comprendre l’architecture du compilateur Roslyn

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 113
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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
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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 114
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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


Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Introduire le compilateur Roslyn

• Comprendre l’architecture du compilateur Roslyn

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 115
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Le Roslyn
Présentation du
compilateur Roslyn Partie II

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Les arbres de syntaxe

• La compilation sous Roslyn

• Les modèles sémantiques sous Roslyn

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 116
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 Errors
Image d’une arbre de syntaxe
prise de MSDN
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
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 117
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 118
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 119
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 …)
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.

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 120
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 121
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Les arbres de syntaxe

• La compilation sous Roslyn

• Les modèles sémantiques sous Roslyn

Formation Programmer en C# 6 alphorm.com™©

Roslyn
Présentation du
compilateur Roslyn Partie III

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 122
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Introduction de la notion espace de travail Workspace

• Le premier pas vers Roslyn

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
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 123
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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é Workspace
Solution, 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
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
Espace
de Travail

Solution
Solution
Solution Solution
Solution
N
N N N

ProjetProjetProjet
Projet
Projet N

Une représentation structurelle


Document
Document Document
Document Document N
d’un espace de travail
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 124
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Introduction de la notion espace de travail Workspace

• Le premier pas vers Roslyn

Formation Programmer en C# 6 alphorm.com™©

Roslyn
Exploration et analyse des
arbres de syntaxes

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 125
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Exploration et analyse des arbres de syntaxes

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Exploration et analyse des arbres de syntaxes

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 126
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Roslyn
Exploration et analyse
des modèles sémantiques

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Exploration et analyse des modèles sémantiques

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 127
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Exploration et analyse des modèles sémantiques

Formation Programmer en C# 6 alphorm.com™©

Roslyn
Exploration et analyse des
espaces de travail

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 128
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Exploration et analyse des espaces de travail

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Exploration et analyse des espaces de travail

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 129
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Roslyn
Extension Visual Studio
Cas du Code Refactoring (VSIX)

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Comprendre le mécanisme du code Refactoring (VSIX)

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 130
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Comprendre le mécanisme du code Refactoring

Formation Programmer en C# 6 alphorm.com™©

Roslyn
Extension Visual Studio
Cas du
Analyzer with Code Fix

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 131
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Comprendre le mécanisme du Analyzer with Code Fix

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Comprendre le mécanisme du Analyzer with Code Fix

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 132
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

C# 6.0 et le Cloud
Programmation C# 6.0
en Cloud

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 133
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 134
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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/
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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 135
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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/

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.

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 136
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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
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 »

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 137
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les études de cas


La réflexion

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• La création d’une classe attribut personnalisée

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 138
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• La création d’une classe attribut personnalisée

Formation Programmer en C# 6 alphorm.com™©

Les études de cas


La sérialisation
avancée

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 139
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• La création d’un type « Serializer » personnalisé

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• La création d’un type « Serializer » personnalisé

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 140
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les études de cas


La sérialisation
avancée

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 141
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Mécanisme de sérialisation du « Serializer » personnalisé

Processus de
Type Mode sérialisation
Format Stockage

1.Prend 2.Prend

Custom Graph
Object Persisté
Serializer

3.Prend
4.Transforme
& persiste

Formation Programmer en C# 6 alphorm.com™©

Mécanisme de sérialisation du « Serializer » personnalisé

Processus de
Type Mode desérialisation
Format Stockage

1.Prend 2.Prend

Graph
Extrait
Custom
Fichier +
Serializer Construction de
L’objet
dynamiquement
3.Prend
4.Transforme
& persiste

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 142
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Mécanisme de sérialisation du « Serializer » personnalisé


• L’interface IFormat

Formation Programmer en C# 6 alphorm.com™©

Mécanisme de sérialisation du « Serializer » personnalisé


• La classe Nœud

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 143
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Mécanisme de sérialisation du « Serializer » personnalisé


• La classe StorageModeAttribute

Formation Programmer en C# 6 alphorm.com™©

Mécanisme de sérialisation du « Serializer » personnalisé


• La classe FormatAttribute

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 144
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

Les études de cas


La programmation
dynamique

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 145
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• Etendre une classe non dynamique au temps d’exécution

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• Etendre une classe non dynamique au temps d’exécution

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 146
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les études de cas


Le Threading

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• La création d’un multi thread Crawler

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 147
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• La création d’un multi thread Crawler

Formation Programmer en C# 6 alphorm.com™©

Les études de cas


Interopérabilité

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 148
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• La communication entre une application .net C# et une carte
électronique programmable à base de AVR Atmega 16

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 149
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les études de cas


Bases de données

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
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 Entity
Framework 6

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 150
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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 Entity
Framework 6

Formation Programmer en C# 6 alphorm.com™©

Les études de cas


Les types

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 151
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Plan
• L’implémentation du type matrice

Formation Programmer en C# 6 alphorm.com™©

Ce qu’on a couvert
• L’implémentation du type matrice

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 152
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les études de cas


Les collections

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 153
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

Les études de cas


LINQ

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 154
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

Formation Programmer en C# 6 alphorm.com™©

Les principaux Principes à tenir


• IQueryable

• IQueryProvider

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 155
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les principaux Principes à tenir


• Les expressions

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 156
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 157
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Les études de cas


Scriptcs

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

Plan
• Exploration et test d’un package Scriptcs cas de
SQLTOXMLJSON

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 158
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

Ce qu’on a couvert
• Exploration et test d’un package Scriptcs cas de
SQLTOXMLJSON

Formation Programmer en C# 6 alphorm.com™©

Le mot de la fin
Le Bilan

Béchir BEJAOUI
Site : http://www.alphorm.com Formateur et Consultant indépendant spécialisé
Blog : http://blog.alphorm.com en technologie et systèmes d’informations
Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 159
Alphorm.com-Support de la 01/06/2016
Formation Programmer en C# 6

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#

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

Formation Programmer en C# 6 alphorm.com™©

TOUTE UTILISATION EN DEHORS


DE ALPHORM EST INTERDITE 160