SlideShare une entreprise Scribd logo
1  sur  12
AlgoWin - James RAVAILLE
http://www.algowin.fr
Langage C# 7
Nouveautés
Spécialiste de la formation et de l’ingénierie avec la plateforme Microsoft .NET
AlgoWin - James RAVAILLE
PRÉSENTATION
Dans ce document, nous vous présentons quelques unes de ces
nouveautés
Programmation
fonctionnelle
Amélioration des
performances
Simplification du code
• Méthodes locales
• Tuples
• Déconstructeurs
• Pattern matching
• Variables locales et retour
de fonctions par référence
• Généralisation des types
de retour asynchrones
• Littéraux binaires
• Séparateur de chiffres
• Variables de sortie
• Membres sous forme
d’expression
• Amélioration de la levée
des exceptions
AlgoWin - James RAVAILLE
LES MÉTHODES LOCALES
Méthodes implémentées au sein de méthodes
Permettent de simplifier l’implémentation de traitements de données
à usage très local :
public void ExecuterMethodeLocale()
{
bool EstPair(int aNombre)
{
// Traitement.
return aNombre % 2 == 0;
}
bool bResult = EstPair(10);
List<int> oListe, oListeNbPairs;
oListe = new List<int>() { 1, 4, 8, 9, 13 };
oListeNbPairs = oListe.Where(i => EstPair(i)).ToList();
}
Utilisation de la méthode locale. La méthode locale EstPair
ne peut être appelée que depuis le code de
ExecuterMethodeLocale
AlgoWin - James RAVAILLE
LES TUPLES (1)
Lors de l’implémentation de fonctions, il est parfois nécessaire de
renvoyer plusieurs informations
Avec la version 4.6.2 du Framework .NET, il est nécessaire d’installer le
package Nuget System.ValueTuple
Méthode retournant un couple d’informations :
Méthode retournant une liste de couples d’informations :
public (int, string) GetFormation()
{
return (100, "Formation C#");
}
public List<(int, string)> GetListeFormations()
{
return new List<(int, string)> {
(100, "Formation Windows Presentation Foundation"),
(150, "Formation .NET Core")};
}
(int, string) oFormation = oNouveaute.GetFormation();
List<(int, string)> oListeFormations = oNouveaute.GetListeFormations();
AlgoWin - James RAVAILLE
LES TUPLES (2)
public (int NbValeurs, long SommeValeurs) GetInfoCollection(IEnumerable<int> aListeValeurs)
{
int iNbValeurs = 0;
long lSommeValeurs = 0;
foreach (int dValeur in aListeValeurs)
{
iNbValeurs++;
lSommeValeurs += dValeur;
}
return (iNbValeurs, lSommeValeurs);
}
Retourne à la fois le nombre et la somme des nombres
(int NbValeurs, long SommeValeurs) oResult = this.GetInfoCollection(oListeNombres);
AlgoWin - James RAVAILLE
LES DÉCONSTRUCTEURS
Permet de « déconstruire » un objet vers un tuple
La classe permettant de créer cet objet doit implémenter une
procédure :
• Nommée Decontruct
• Avoir des paramètres de sortie indiquant les informations à fournir au tuple
public class Heure
{
public int Minutes { get; set; }
public int Secondes { get; set; }
public Heure(int aMinutes, int aSecondes)
{
this.Minutes = aMinutes;
this.Secondes = aSecondes;
}
public void Deconstruct(out int aMinutes, out int aSecondes)
{
aMinutes = this.Minutes;
aSecondes = this.Secondes;
}
}
Cette méthode sera appelée lors de la création du tuple.
Elle peut être surchargée
AlgoWin - James RAVAILLE
LES PATTERNS MATCHINGS
Permet de déterminer si une valeur correspond à des cas prédéfinis.
Exemple :
switch (aFormeGeometrique)
{
case Rectangle oRectangle:
{
sMessage = $"Aire du rectangle : {oRectangle.Largeur * oRectangle.Hauteur}";
break;
}
case Disque oDisque when oDisque.Rayon <= 10:
{
sMessage = "Disque usé";
break;
}
case Disque oDisque:
{
sMessage = "Disque neuf";
break;
}
default:
{
break;
}
}
L’instruction switch permet d’évaluer le type
d’un objet
La clause when permet de préciser une
condition
L’ordre des clauses est important afin de
gérer correctement les conflits. Toujours
spécifier de la plus précise à la plus générale
AlgoWin - James RAVAILLE
LES VARIABLES DE SORTIE
L’utilisation des paramètres de sortie nécessitait de déclarer au
préalable les variables avant d’appeler les méthodes qui en utilisaient.
Exemple :
La version 7 du langage C# permet de déclarer ces variables
directement dans l’appel des méthodes :
string sValeur = "10";
int iValeur;
bool bResult = int.TryParse(sValeur, out iValeur);
bool bResult = int.TryParse(sValeur, out int iValeur);
Déclaration de la variable correspondant au paramètre de sortie
(résultat de la conversion en cas de réussite)
Il est également possible d’ignorer la valeur du paramètre de sortie,
en spécifiant « _ » en lieu et place du nom de la variable
Aussi, l’utilisation de l’inférence de type est autorisée
AlgoWin - James RAVAILLE
MEMBRES SOUS FORME D’EXPRESSION
La version 6 du langage C# a introduit cette fonctionnalité pour les
propriétés (accesseurs), les méthodes et indexeurs
La version 7 l’étend aux constructeurs, destructeurs :
public class Heure
{
public int Minutes { get; set; }
public int Secondes { get; set; }
public long TotalSecondes => this.Minutes * 60 + this.Secondes;
public string ToString() => $"({this.Minutes}, {this.Secondes})";
}
private int _Minutes;
public int Minutes { get => this._Minutes; set => this._Minutes = value; }
public long TotSecondes => this.Minutes * 60 + this.Secondes;
public Heure(int aMinutes) => this.Minutes = aMinutes;
public string ToString() => $"({this.Minutes}, {this.Secondes})";
~Heure() => Debug.WriteLine("Finaliseur");
AlgoWin - James RAVAILLE
AMÉLIORATION DE LA LEVÉE D’EXCEPTIONS
Jusqu’à la version 6 du langage C#, l’instruction throw (permettant de
lever une exception), ne pouvait pas être utilisée dans un contexte où
une expression était attendue
La version 7 du langage C# simplifie l’écrire de ces blocs d’instructions :
throw est une instruction convertible en n’importe quel type. Par
exemple, l’écriture de la validation de valeurs des paramètres d’une
méthode est simplifiée :
// Dans une expression lambda.
Func<int> f = () => throw new Exception();
// Dans une expression conditionnelle.
int x = m == 75 ? 25 : throw new Exception();
public class Disque : FormeGeometrique
{
public double Rayon { get; set; }
public Disque(double aRayon) : base()
{
this.Rayon = (aRayon > 0) ? aRayon : throw new ArgumentException(nameof(aRayon));
}
}
AlgoWin - James RAVAILLE
VARIABLES LOCALES ET RETOURS DE FONCTIONS PAR RÉFÉRENCE (1)
Les applications à haute performance utilisent des types valeurs (telles
que les structures) :
• Meilleure gestion de la mémoire
• Gestion de données contigües dans un tableau
Toutefois, l’utilisation de types valeurs implique de nombreuses copies
de données
Les versions précédentes du langage C# permettent depuis toujours de
passer des paramètres par référence plutôt que par valeur, grâce à
l’utilisation du mot clé ref
La version 7 du langage C# étend ce mécanisme aux variables locales et
aux valeurs de retour des fonctions, évitant ainsi les copies inutiles de
données, améliorant ainsi les performances lors de l’exécution
AlgoWin - James RAVAILLE
VARIABLES LOCALES ET RETOURS DE FONCTIONS PAR RÉFÉRENCE (2)
Implémentation de la structure :
Méthode de recherche d’un élément à partir d’un identifiant unique :
Recherche d’un élément :
public struct Structure
{
public Guid Identifiant { get; set; }
public string Nom { get; set; }
}
public static Structure[] _Elements;
public static ref Structure GetElement(Guid aUid)
{
for (int iIndice = 0; iIndice < _Elements.Length; iIndice++)
{
if (_Elements[iIndice].Identifiant == aUid)
{
return ref _Elements[iIndice];
}
}
throw new Exception("Elément non trouvé");
}
ref Structure item = ref GetElement(Guid.Parse("0ED9432A-8BEB-4076-A630-821DA9BE2A21"));

Contenu connexe

Tendances

Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)ISIG
 
R fait du la tex
R fait du la texR fait du la tex
R fait du la texCdiscount
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelleGeeks Anonymes
 
Vbisigk
VbisigkVbisigk
VbisigkISIG
 
Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôleAbdelouahed Abdou
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Arrow Group
 
Presentation Csharp et winforms
Presentation Csharp et winformsPresentation Csharp et winforms
Presentation Csharp et winformsChristophe Zome
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresECAM Brussels Engineering School
 

Tendances (18)

Une Introduction à R
Une Introduction à RUne Introduction à R
Une Introduction à R
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)
 
R fait du la tex
R fait du la texR fait du la tex
R fait du la tex
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
Theme 7
Theme 7Theme 7
Theme 7
 
Vbisigk
VbisigkVbisigk
Vbisigk
 
Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôle
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8
 
Presentation Csharp et winforms
Presentation Csharp et winformsPresentation Csharp et winforms
Presentation Csharp et winforms
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 

Similaire à C# 7 - Nouveautés

Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Jean-Michel Doudoux
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdfImaneZoubir1
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketStéphane Legrand
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptxSafaeLhr1
 
cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024YounesOuladSayad1
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 

Similaire à C# 7 - Nouveautés (20)

Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JS
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
oracle : le PL-SQL
oracle : le PL-SQLoracle : le PL-SQL
oracle : le PL-SQL
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacket
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024cours developpement web javascript 2023/2024
cours developpement web javascript 2023/2024
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 

Dernier

Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptxIntégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptxabdououanighd
 
L application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptxL application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptxhamzagame
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaireTxaruka
 
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptxCopie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptxikospam0
 
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...Universidad Complutense de Madrid
 
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANKRAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANKNassimaMdh
 
Télécommunication et transport .pdfcours
Télécommunication et transport .pdfcoursTélécommunication et transport .pdfcours
Télécommunication et transport .pdfcourshalima98ahlmohamed
 
les_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhkles_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhkRefRama
 
Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfAmgdoulHatim
 
python-Cours Officiel POO Python-m103.pdf
python-Cours Officiel POO Python-m103.pdfpython-Cours Officiel POO Python-m103.pdf
python-Cours Officiel POO Python-m103.pdftrendingv83
 
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projetFormation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projetJeanYvesMoine
 
L'expression du but : fiche et exercices niveau C1 FLE
L'expression du but : fiche et exercices  niveau C1 FLEL'expression du but : fiche et exercices  niveau C1 FLE
L'expression du but : fiche et exercices niveau C1 FLElebaobabbleu
 
Cours Généralités sur les systèmes informatiques
Cours Généralités sur les systèmes informatiquesCours Généralités sur les systèmes informatiques
Cours Généralités sur les systèmes informatiquesMohammedAmineHatoch
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...Nguyen Thanh Tu Collection
 
Neuvaine de la Pentecôte avec des textes de saint Jean Eudes
Neuvaine de la Pentecôte avec des textes de saint Jean EudesNeuvaine de la Pentecôte avec des textes de saint Jean Eudes
Neuvaine de la Pentecôte avec des textes de saint Jean EudesUnidad de Espiritualidad Eudista
 

Dernier (16)

Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptxIntégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
 
L application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptxL application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptx
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptxCopie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
 
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
 
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANKRAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
 
Télécommunication et transport .pdfcours
Télécommunication et transport .pdfcoursTélécommunication et transport .pdfcours
Télécommunication et transport .pdfcours
 
les_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhkles_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhk
 
Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
 
python-Cours Officiel POO Python-m103.pdf
python-Cours Officiel POO Python-m103.pdfpython-Cours Officiel POO Python-m103.pdf
python-Cours Officiel POO Python-m103.pdf
 
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projetFormation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
 
L'expression du but : fiche et exercices niveau C1 FLE
L'expression du but : fiche et exercices  niveau C1 FLEL'expression du but : fiche et exercices  niveau C1 FLE
L'expression du but : fiche et exercices niveau C1 FLE
 
Cours Généralités sur les systèmes informatiques
Cours Généralités sur les systèmes informatiquesCours Généralités sur les systèmes informatiques
Cours Généralités sur les systèmes informatiques
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Neuvaine de la Pentecôte avec des textes de saint Jean Eudes
Neuvaine de la Pentecôte avec des textes de saint Jean EudesNeuvaine de la Pentecôte avec des textes de saint Jean Eudes
Neuvaine de la Pentecôte avec des textes de saint Jean Eudes
 
Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024
 

C# 7 - Nouveautés

  • 1. AlgoWin - James RAVAILLE http://www.algowin.fr Langage C# 7 Nouveautés Spécialiste de la formation et de l’ingénierie avec la plateforme Microsoft .NET
  • 2. AlgoWin - James RAVAILLE PRÉSENTATION Dans ce document, nous vous présentons quelques unes de ces nouveautés Programmation fonctionnelle Amélioration des performances Simplification du code • Méthodes locales • Tuples • Déconstructeurs • Pattern matching • Variables locales et retour de fonctions par référence • Généralisation des types de retour asynchrones • Littéraux binaires • Séparateur de chiffres • Variables de sortie • Membres sous forme d’expression • Amélioration de la levée des exceptions
  • 3. AlgoWin - James RAVAILLE LES MÉTHODES LOCALES Méthodes implémentées au sein de méthodes Permettent de simplifier l’implémentation de traitements de données à usage très local : public void ExecuterMethodeLocale() { bool EstPair(int aNombre) { // Traitement. return aNombre % 2 == 0; } bool bResult = EstPair(10); List<int> oListe, oListeNbPairs; oListe = new List<int>() { 1, 4, 8, 9, 13 }; oListeNbPairs = oListe.Where(i => EstPair(i)).ToList(); } Utilisation de la méthode locale. La méthode locale EstPair ne peut être appelée que depuis le code de ExecuterMethodeLocale
  • 4. AlgoWin - James RAVAILLE LES TUPLES (1) Lors de l’implémentation de fonctions, il est parfois nécessaire de renvoyer plusieurs informations Avec la version 4.6.2 du Framework .NET, il est nécessaire d’installer le package Nuget System.ValueTuple Méthode retournant un couple d’informations : Méthode retournant une liste de couples d’informations : public (int, string) GetFormation() { return (100, "Formation C#"); } public List<(int, string)> GetListeFormations() { return new List<(int, string)> { (100, "Formation Windows Presentation Foundation"), (150, "Formation .NET Core")}; } (int, string) oFormation = oNouveaute.GetFormation(); List<(int, string)> oListeFormations = oNouveaute.GetListeFormations();
  • 5. AlgoWin - James RAVAILLE LES TUPLES (2) public (int NbValeurs, long SommeValeurs) GetInfoCollection(IEnumerable<int> aListeValeurs) { int iNbValeurs = 0; long lSommeValeurs = 0; foreach (int dValeur in aListeValeurs) { iNbValeurs++; lSommeValeurs += dValeur; } return (iNbValeurs, lSommeValeurs); } Retourne à la fois le nombre et la somme des nombres (int NbValeurs, long SommeValeurs) oResult = this.GetInfoCollection(oListeNombres);
  • 6. AlgoWin - James RAVAILLE LES DÉCONSTRUCTEURS Permet de « déconstruire » un objet vers un tuple La classe permettant de créer cet objet doit implémenter une procédure : • Nommée Decontruct • Avoir des paramètres de sortie indiquant les informations à fournir au tuple public class Heure { public int Minutes { get; set; } public int Secondes { get; set; } public Heure(int aMinutes, int aSecondes) { this.Minutes = aMinutes; this.Secondes = aSecondes; } public void Deconstruct(out int aMinutes, out int aSecondes) { aMinutes = this.Minutes; aSecondes = this.Secondes; } } Cette méthode sera appelée lors de la création du tuple. Elle peut être surchargée
  • 7. AlgoWin - James RAVAILLE LES PATTERNS MATCHINGS Permet de déterminer si une valeur correspond à des cas prédéfinis. Exemple : switch (aFormeGeometrique) { case Rectangle oRectangle: { sMessage = $"Aire du rectangle : {oRectangle.Largeur * oRectangle.Hauteur}"; break; } case Disque oDisque when oDisque.Rayon <= 10: { sMessage = "Disque usé"; break; } case Disque oDisque: { sMessage = "Disque neuf"; break; } default: { break; } } L’instruction switch permet d’évaluer le type d’un objet La clause when permet de préciser une condition L’ordre des clauses est important afin de gérer correctement les conflits. Toujours spécifier de la plus précise à la plus générale
  • 8. AlgoWin - James RAVAILLE LES VARIABLES DE SORTIE L’utilisation des paramètres de sortie nécessitait de déclarer au préalable les variables avant d’appeler les méthodes qui en utilisaient. Exemple : La version 7 du langage C# permet de déclarer ces variables directement dans l’appel des méthodes : string sValeur = "10"; int iValeur; bool bResult = int.TryParse(sValeur, out iValeur); bool bResult = int.TryParse(sValeur, out int iValeur); Déclaration de la variable correspondant au paramètre de sortie (résultat de la conversion en cas de réussite) Il est également possible d’ignorer la valeur du paramètre de sortie, en spécifiant « _ » en lieu et place du nom de la variable Aussi, l’utilisation de l’inférence de type est autorisée
  • 9. AlgoWin - James RAVAILLE MEMBRES SOUS FORME D’EXPRESSION La version 6 du langage C# a introduit cette fonctionnalité pour les propriétés (accesseurs), les méthodes et indexeurs La version 7 l’étend aux constructeurs, destructeurs : public class Heure { public int Minutes { get; set; } public int Secondes { get; set; } public long TotalSecondes => this.Minutes * 60 + this.Secondes; public string ToString() => $"({this.Minutes}, {this.Secondes})"; } private int _Minutes; public int Minutes { get => this._Minutes; set => this._Minutes = value; } public long TotSecondes => this.Minutes * 60 + this.Secondes; public Heure(int aMinutes) => this.Minutes = aMinutes; public string ToString() => $"({this.Minutes}, {this.Secondes})"; ~Heure() => Debug.WriteLine("Finaliseur");
  • 10. AlgoWin - James RAVAILLE AMÉLIORATION DE LA LEVÉE D’EXCEPTIONS Jusqu’à la version 6 du langage C#, l’instruction throw (permettant de lever une exception), ne pouvait pas être utilisée dans un contexte où une expression était attendue La version 7 du langage C# simplifie l’écrire de ces blocs d’instructions : throw est une instruction convertible en n’importe quel type. Par exemple, l’écriture de la validation de valeurs des paramètres d’une méthode est simplifiée : // Dans une expression lambda. Func<int> f = () => throw new Exception(); // Dans une expression conditionnelle. int x = m == 75 ? 25 : throw new Exception(); public class Disque : FormeGeometrique { public double Rayon { get; set; } public Disque(double aRayon) : base() { this.Rayon = (aRayon > 0) ? aRayon : throw new ArgumentException(nameof(aRayon)); } }
  • 11. AlgoWin - James RAVAILLE VARIABLES LOCALES ET RETOURS DE FONCTIONS PAR RÉFÉRENCE (1) Les applications à haute performance utilisent des types valeurs (telles que les structures) : • Meilleure gestion de la mémoire • Gestion de données contigües dans un tableau Toutefois, l’utilisation de types valeurs implique de nombreuses copies de données Les versions précédentes du langage C# permettent depuis toujours de passer des paramètres par référence plutôt que par valeur, grâce à l’utilisation du mot clé ref La version 7 du langage C# étend ce mécanisme aux variables locales et aux valeurs de retour des fonctions, évitant ainsi les copies inutiles de données, améliorant ainsi les performances lors de l’exécution
  • 12. AlgoWin - James RAVAILLE VARIABLES LOCALES ET RETOURS DE FONCTIONS PAR RÉFÉRENCE (2) Implémentation de la structure : Méthode de recherche d’un élément à partir d’un identifiant unique : Recherche d’un élément : public struct Structure { public Guid Identifiant { get; set; } public string Nom { get; set; } } public static Structure[] _Elements; public static ref Structure GetElement(Guid aUid) { for (int iIndice = 0; iIndice < _Elements.Length; iIndice++) { if (_Elements[iIndice].Identifiant == aUid) { return ref _Elements[iIndice]; } } throw new Exception("Elément non trouvé"); } ref Structure item = ref GetElement(Guid.Parse("0ED9432A-8BEB-4076-A630-821DA9BE2A21"));