1 Développement Windows Mitsuru FURUTA Relations techniques développeurs .
C# 2.0, un an après Mitsuru FURUTA Relations techniques développeurs - Microsoft France...
-
Upload
charline-chapuis -
Category
Documents
-
view
106 -
download
2
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 [email protected] – 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