C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France...

25
C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France [email protected] http://blogs.microsoft.fr/mitsufu

Transcript of C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France...

Page 1: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

C# 2.0, un an après

Mitsuru FURUTARelations techniques développeurs - Microsoft [email protected] – http://blogs.microsoft.fr/mitsufu

Page 2: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Agenda

Introduction

Generics

Nullables

-- Pause --

Méthodes anonymes

Itérations

…C# 3.0

Page 3: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Introduction

Pourquoi une telle présentation ?

Au delà de la compréhension technique, un nouveau langage demande également à être assimilé et intégré dans nos habitudes de développement. C# 2.0 apporte plusieurs nouvelles extensions importantes permettant d’exploiter toujours au mieux les nouveautés de la plate-forme .Net 2.0.

Avant d’adopter ces nouveautés, il est nécessaire d’en comprendre à la fois les intérêts et les contraintes.

Page 4: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les generics

Les generics permettent aux classes, structures, interfaces, délégués et méthodes d’être paramètrés par les types de données qu’ils stockent et qu’ils manipulent.

Les types ainsi définis apportent:la robustesse d’un typage fort

la clarté du code (plus de casts)

la performance en supprimant les boxing/unboxing

la sécurité d’une vérification accrue à la compilation

Bien que ressemblant fortement aux templates du C++, la syntaxe de C# 2.0 offre une approche plus simple et plus sécurisée. (limitations, contraintes)

Page 5: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les generics: syntaxe

class MyClass<T> {}struct MyStruct<T> {}delegate R MyDelegate<P, R>(P param);interface IMyInterface<T> { T GetData(); }void MyMethod<T>(List<T> param) {};

Contraintes: where, new(), structLe mot clé “default”

Attention aux overloadsNe pas casser la programmation objet !

Page 6: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Generics: syntaxe et introduction + Reflector

DemoDemo

Page 7: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les generics: inférence de type

Possibilité d’omettre un paramètre de type lorsque le compilateur peut le déduire de manière certaine

Cette fonctionnalité est primordiale pour la simplicité d’écriture des séquences Linq

q.Select<string>().ToList<string>().First<string>();

q.Select().ToList().First();

Page 8: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Generics: l’inférence de type

DemoDemo

Page 9: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les generics: compilation et reflection

Nature de la compilationLes generics ne sont pas des templates !

Les vérifications de types ont bien lieu à la compilation comme avec un pré-processeur de templatesMais les classes typées ne sont pas compilées en IL (!= java)

Les generics sont identifiés dans les assembly .Net

Les classes (ou méthodes) fortement typées sont compilées nativement au moment de la première utilisation de chacune

La reflection de la CLR 2.0 a été étendue pour récupérer ces informations de type

Tests: t.IsGenericType, t.IsGenericTypeDefinition

Création: Type.MakeGenericType()

Page 10: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Generics: la reflection

DemoDemo

Page 11: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les generics: compilation et reflection

Quelques dangers:Membres statiques

Classes imbriquées

Page 12: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les generics: cas d’utilisation

FileLineReader

Gestion d’un cache d’objects

Page 13: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Generics: cas d’utilisation

FileLineReader

Gestion d’un cache d’objets

DemoDemo

Page 14: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les nullables

Syntaxe et définition:Les nullables sont des structures génériques qui permettent de remplacer les types « valeurs » en leur apportant la possibilité d’être null.

Nullable<Int> i;

i = 123;

int j = (int) i; int j = i.Value;

if (i.HasValue)

Le cas de DBNull.Value

Page 15: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Nullables: définition + Reflector

DemoDemo

Page 16: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

PausePause

Page 17: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les méthodes anonymes

Syntaxe et définitionLes méthodes anonymes permettent de fournir à un délégué des instructions directement « inlinées » à l’endroit où le délégué est affecté.

Tous les évènements et callbacks du framework .Net étant basés sur des délégués, les méthodes anonymes simplifient grandement leur usage.

Outre une simplification d’écriture, les méthodes anonymes permettent d’avoir un accès partagé avec la portée locale.

L’exécution réelle du délégué pouvant être asynchrone, une structure complexe permet la « survie » des données partagées au-delà de la méthode « hôte ».

Page 18: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les méthodes anonymes:

Introduction + Reflector

Méthodes de List<>

DemoDemo

Page 19: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les méthodes anonymes:

Exécution différée et exécution parallèle

DemoDemo

Page 20: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les méthodes anonymes

Comportement avec les instructions de blocAttention à la lisibilité !

Le cas du try…catch

Profiter de l’exécution différéeFactoriser les instructions de bloc !

Page 21: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les méthodes anonymes:

Les instructions de bloc

DemoDemo

Page 22: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Itérations

Rappel sur IEnumeratorReset/Current/MoveNext

IEnumerable ou comment combler l’absence de délégation d’implémentation d’interface

Les mots clés: yield return / yield break

Page 23: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

Les itérations:

FileLineReader, suite et fin

Les classes Enum revisitées

DemoDemo

Page 24: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

…C# 3.0

Les expressions lambdaOffrir une écriture simplifiée des méthodes anonymes

button1.Click += (o, args) => MessageBox.Show(o);

Les requêtes Linq

Page 25: C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.commitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu.

C# 3.0

ToDictionnary()

Recherche d’attributs

DemoDemo