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

Post on 03-Apr-2015

106 views 2 download

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

C# 2.0, un an après

Mitsuru FURUTARelations techniques développeurs - Microsoft Francemitsufu@microsoft.com – http://blogs.microsoft.fr/mitsufu

Agenda

Introduction

Generics

Nullables

-- Pause --

Méthodes anonymes

Itérations

…C# 3.0

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.

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)

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 !

Generics: syntaxe et introduction + Reflector

DemoDemo

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();

Generics: l’inférence de type

DemoDemo

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

Generics: la reflection

DemoDemo

Les generics: compilation et reflection

Quelques dangers:Membres statiques

Classes imbriquées

Les generics: cas d’utilisation

FileLineReader

Gestion d’un cache d’objects

Generics: cas d’utilisation

FileLineReader

Gestion d’un cache d’objets

DemoDemo

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

Nullables: définition + Reflector

DemoDemo

PausePause

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

Les méthodes anonymes:

Introduction + Reflector

Méthodes de List<>

DemoDemo

Les méthodes anonymes:

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

DemoDemo

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 !

Les méthodes anonymes:

Les instructions de bloc

DemoDemo

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

Les itérations:

FileLineReader, suite et fin

Les classes Enum revisitées

DemoDemo

…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

C# 3.0

ToDictionnary()

Recherche d’attributs

DemoDemo