C# - marc. ?· C# .NET Marc Chevaldonné marc.chevaldonne@u-clermont1.fr Année scolaire 2011 - 2012…

  • Published on
    10-Nov-2018

  • View
    212

  • Download
    0

Transcript

  • C# .NET

    Marc Chevaldonnmarc.chevaldonne@u-clermont1.frhttp://marc.chevaldonne.free.fr

    Anne scolaire 2011 - 2012

    1

    dimanche 18 septembre 2011

    mailto:marc.chevaldonne@u-clermont1.fr?subject=mailto:marc.chevaldonne@u-clermont1.fr?subject=http://marc.chevaldonne.free.frhttp://marc.chevaldonne.free.fr

  • cration de types en C#Hritage : syntaxe, overload

    Hritage (proche C++) syntaxe (cf. exemple 15)

    accesseur protected constructeur : appel du ctor de la classe mre avec base sealed : accesseur pour empcher lhritage ou loverload

    de mthodes method or field overload : (cf. exemple 16)

    conseill dutiliser new pour montrer que cest intentionnel... ... mais plutt dconseill de surcharger les mthodes dans

    les classes filles dans une API

    2

    dimanche 18 septembre 2011

  • cration de types en C#Hritage : initialiseurs et constructeurs

    Hritage (proche C++) initialiseurs et constructeurs (cf. exemple 17) :

    initializers statiques de la classe fille constructeur statique de la classe fille initializers (instance) de la classe fille initializers statiques de la classe mre constructeur statique de la classe mre initializers (instance) de la classe mre constructeur (instance) de la classe mre constructeur (instance) de la classe fille

    3

    dimanche 18 septembre 2011

  • cration de types en C#Hritage : casting

    Hritage (proche C++) Casting (cf. exemple 18)

    Upcasting : implicite Downcasting

    operator is operator as

    plus sr que le cast aveugle (C-like) + exception plus rapide en excution => prfrer

    4

    dimanche 18 septembre 2011

  • cration de types en C#Hritage/Polymorphisme

    Hritage et Polymorphisme (proche C++) virtual (cf. exemple 19) new vs virtual vs override (cf. exemples 16 et 19)

    Classes abstraites (cf. exemple 20)

    5

    dimanche 18 septembre 2011

  • cration de types en C#Immutabilit et structures

    Immutabilit diffrentes immutabilits

    la vraie : constante, la valeur ne change jamais write-once immutability : la valeur est initialise une seule fois, puis ne

    change jamais shallow vs deep immutability : shallow immutability veut dire que la

    valeur est non mutable mais quelle contient des membres de type rfrence mutables (e.g. un tableau)

    immutable faades : semblent immutables de lextrieur (ne peuvent pas tre modifies de lextrieur) mais changent de lintrieur

    avantages : plus sr (ncessite moins de vrifications) thread safe : accessible en lecture par plusieurs threads simultans utilisables dans les tables de hchage ...

    conseil : crivez vos structures write-once immutable

    6

    dimanche 18 septembre 2011

  • cration de types en C#Interfaces

    Interfaces (cf. exemple 23) diffrences avec les classes (abstraites)

    prfrez une classe et des sous-classes lorsquelles doivent partager une mme implmentation => dfinition de types

    prfrez une interface et des implmentations lorsque ces dernires sont indpendantes => dfinition de fonctionnalits

    amliorent lencapsulation

    interfaces classes

    une classe peut implmenter plusieurs interfaces une classe ne peut driver que dune seule classe

    tous les membres dune interface sont abstraits une classe abstraite peut avoir des membres abstraits et des membres concrets

    les structures peuvent implmenter des interfaces une structure ne peut pas hriter dune classe

    7

    dimanche 18 septembre 2011

  • cration de types en C#Boxing Unboxing

    boxing unboxing boxing : cast dun type valeur vers un type rfrence

    int x = 3;object obj = x;

    unboxing : cast dun type rfrence vers un type valeurint y = (int) obj;

    lent => viter interfaces et boxing

    interface I { void Method(); }struct S : I { public void Method() {} }

    si on cast linterface en struct => pas de boxingS s = new S(); /*pas de boxing*/ s.Method();

    si on cast une structure en une interface => boxingI i = s; /* boxing*/ i.Method();

    8

    dimanche 18 septembre 2011

  • C# avancNullable Types

    Nullable types (cf. exemple 25) permettent de reprsenter des valeurs null pour des types

    valeur Nullable : structure lgre et non mutable

    Value et HasValue conversion de T vers T? implicite conversion de T? vers T explicite

    9

    dimanche 18 septembre 2011

  • Fondamentaux de la plateforme .NETstring et StringBuilder

    string (cf. exemple 26) squence non mutable de caractres construction string vide ou null chercher manipuler comparaison de string

    StringBuilder (cf. exemple 27) mutable plus rapide et plus efficace que le string

    10

    dimanche 18 septembre 2011

  • Fondamentaux de la plateforme .NETFormatting and Parsing / la Console

    Formatting and Parsing (cf. exemple 28) Formatting = convertir en string (par dfaut, ToString) Parsing = convertir depuis un string (par dfaut, Parse sur de

    nombreux types) ToString Parse TryParse IFormatProvider

    Standard Numeric Format Strings Custom Numeric Format Strings Enumeration Format Strings

    la Console (cf. exemple 29)

    11

    dimanche 18 septembre 2011

    http://msdn.microsoft.com/en-us/library/dwhawy9k.aspxhttp://msdn.microsoft.com/en-us/library/dwhawy9k.aspxhttp://msdn.microsoft.com/en-us/library/0c899ak8.aspxhttp://msdn.microsoft.com/en-us/library/0c899ak8.aspxhttp://msdn.microsoft.com/en-us/library/c3s1ez6e.aspxhttp://msdn.microsoft.com/en-us/library/c3s1ez6e.aspx

  • Utilisation de Visual Studio 2010

    environnement de travail

    solutions, projets, explorateur de solutions

    explorateur de classes

    compilation et excution

    debuggeur

    12

    dimanche 18 septembre 2011

  • Fondamentaux de la plateforme .NETDate Time Math

    TimeSpan (cf. exemple 30) Standard TimeSpan Format Strings Custom TimeSpan Format Strings

    Date Time (cf. exemple 30) Standard Date and Time Format Strings Custom Date and Time Format Strings

    Math Min Max Abs Cos Exp...

    Random (cf. exemple 31)

    13

    dimanche 18 septembre 2011

    http://msdn.microsoft.com/en-us/library/ee372286.aspxhttp://msdn.microsoft.com/en-us/library/ee372286.aspxhttp://msdn.microsoft.com/en-us/library/ee372287.aspxhttp://msdn.microsoft.com/en-us/library/ee372287.aspxhttp://msdn.microsoft.com/en-us/library/az4se3k1.aspxhttp://msdn.microsoft.com/en-us/library/az4se3k1.aspxhttp://msdn.microsoft.com/en-us/library/8kb3ddd4.aspxhttp://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

  • cration de types en C#Generics

    2 solutions pour crire du code rutilisable travers diffrents types : lhritage et la gnricit hritage : rutilisablit travers un type de base gnricit : rutilisabilit travers un patron

    Gnricit (cf. exemples 32 40) introduction

    dfinition du problme (cf. exemple 32) et pourquoi pas object ? (cf. exemple 33)

    syntaxe (cf. exemple 34) default (cf. exemple 35) contraintes : where -> base-class, interface, class, struct, new()

    (cf. exemple 36 et 37) hritage (cf. exemple 38)

    14

    dimanche 18 septembre 2011

  • cration de types en C#Generics

    Gnricit (cf. exemples 32 40) covariance :

    soit C une classe qui hrite de B un type X est dit covariant si X peut tre converti en

    X

    les classes NE SONT PAS covariantes (cf. exemple 39) les interfaces SONT covariantes (cf. exemple 40) les tableaux SONT covariants les dlgus sont covariants

    contravariance : soit C une classe qui hrite de B un type X est dit contravariant si X peut tre converti en

    X 15dimanche 18 septembre 2011

  • CollectionsIntroduction

    ensemble standard de types pour stocker et grer des collections dobjets

    listes de taille dynamique listes chanes dictionnaires (tris ou non) tableaux ...

    dimanche 18 septembre 2011

  • CollectionsIntroduction

    ensemble standard de types pour stocker et grer des collections dobjets

    listes de taille dynamique listes chanes dictionnaires (tris ou non) tableaux ...

    Quest-ce quon trouve dans les espaces de noms de Collections ? (System.Collections, System.Collections.Generic, System.Collections.Specialized, System.Collections.ObjectModel)

    des interfaces (dfinition de protocoles pour les collections)

    des classes de collections prtes lemploi (lists, dictionaries, arrays ...)

    des classes de base pour crire vos propres collections

    dimanche 18 septembre 2011

  • CollectionsIntroduction

    ensemble standard de types pour stocker et grer des collections dobjets

    listes de taille dynamique listes chanes dictionnaires (tris ou non) tableaux ...

    Quest-ce quon trouve dans les espaces de noms de Collections ? (System.Collections, System.Collections.Generic, System.Collections.Specialized, System.Collections.ObjectModel)

    des interfaces (dfinition de protocoles pour les collections)

    des classes de collections prtes lemploi (lists, dictionaries, arrays ...)

    des classes de base pour crire vos propres collections

    galits, hashcode, etc... => plus tard

    on va en parler un peu

    on va en parler beaucoup

    pas le temps

    dimanche 18 septembre 2011

  • CollectionsUn tout petit peu dhistoire...

    Avant C# 2, les Generics nexistaient pas, les collections ntaient pas gnriques

    Avec C# 2 et larrive de la gnricit, les collections sont devenues gnriques,

    mais les anciennes sont restes, et certains liens subsistent...

    Nous parlerons surtout des collections gnriques

    dimanche 18 septembre 2011

  • CollectionsInterfaces

    IEnumerator IEnumerator

    IEnumerable IEnumerable

    ICollection ICollection

    IDictionary IList IList IDictionary

    non gnriques gnriques

    dimanche 18 septembre 2011

  • CollectionsInterfaces

    IEnumerator IEnumerator

    IEnumerable IEnumerable

    ICollection ICollection

    IDictionary IList IList IDictionary

    non gnriques gnriques

    pour traverserune collection

    pour utiliser foreach

    dimanche 18 septembre 2011

  • CollectionsInterfaces

    IEnumerator IEnumerator

    IEnumerable IEnumerable

    ICollection ICollection

    IDictionary IList IList IDictionary

    non gnriques gnriques

    permet de compter,dajouter, denlever (...) des lments dune collection

    dimanche 18 septembre 2011

  • CollectionsInterfaces

    IEnumerator IEnumerator

    IEnumerable IEnumerable

    ICollection ICollection

    IDictionary IList IList IDictionary

    non gnriques gnriques

    permet daccder aux lments par indice (tableau)

    dimanche 18 septembre 2011

  • CollectionsInterfaces

    IEnumerator IEnumerator

    IEnumerable IEnumerable

    ICollection ICollection

    IDictionary IList IList IDictionary

    non gnriques gnriques stocke des paires cl/valeurtables de hachage, etc...

    dimanche 18 septembre 2011

  • CollectionsIEnumerable et IEnumerator

    public interface IEnumerator{ bool MoveNext(); object Current { get; } void Reset();}

    public interface IEnumerator : IEnumerator, IDisposable{ T Current { get; }}

    public interface IEnumerable{ IEnumerator GetEnumerator();}

    public interface IEnumerable : IEnumerable{ IEnumerator GetEnumerator();}

    Comment utiliser une collection qui hrite de IEnumerable ? avec un foreach en rcuprant un numrateur et en utilisant MoveNext et Current cf exemple 41

    dimanche 18 septembre 2011

  • CollectionsIEnumerable et IEnumerator

    public interface IEnumerator{ bool MoveNext(); object Current { get; } void Reset();}

    public interface IEnumerator : IEnumerator, IDisposable{ T Current { get; }}

    public interface IEnumerable{ IEnumerator GetEnumerator();}

    public interface IEnumerable : IEnumerable{ IEnumerator GetEnumerator();}

    Pourquoi driver de IEnumerable ? pour pouvoir utiliser foreach ... ... sur sa propre collection non standard pour faire une numration plus complexe cf exemples 42 et 43

    dimanche 18 septembre 2011

  • CollectionsICollection

    public interface ICollection : IEnumerable, IEnumerable{ int Count (); void Add (T item); bool Remove (T item); void Clear (); bool Contains (T item); void CopyTo (T[] array, int arrayIndex); bool IsReadOnly { get; }}

    comptage

    insertion la fin (append)nettoyage

    qqs recherches simples

    dimanche 18 septembre 2011

  • CollectionsIList

    public interface IList : ICollection, IEnumerable, IEnumerable{ T this [int index] { get; set; }

    int IndexOf (T item);

    void Insert (int index, T item); void RemoveAt (int index);}

    indexeur

    insertion une place prcise

    qqs recherches simples

    dimanche 18 septembre 2011

  • CollectionsLes classes de base implmentant ICollection et IList

    Array

    List

    Queue

    Stack

    LinkedList

    BitArray

    HashSet

    dimanche 18 septembre 2011

  • CollectionsLes classes de base implmentant ICollection et IList

    Array

    List

    Queue

    Stack

    LinkedList

    BitArray

    HashSet

    hrite de IList, IList et ICloneable

    permet de : construire, indexer, enumrer, trier, inverser les lments, copier les lments ...

    cf. exemples 3 et 44

    dimanche 18 septembre 2011

  • CollectionsLes classes de base implmentant ICollection et IList

    Array

    List

    Queue

    Stack

    LinkedList

    BitArray

    HashSet

    FIFO : First In First Out

    permet de : rajouter des lments dans la file (Enqueue), retirer llment suivant de la file (Dequeue), connatre llment suivant de la file sans le retirer (Peek) compter le nombre dlments de la file

    cf. exemple 45

    dimanche 18 septembre 2011

  • CollectionsLes classes de base implmentant ICollection et IList

    Array

    List

    Queue

    Stack

    LinkedList

    BitArray

    HashSet

    LIFO : Last In First Out

    permet de : rajouter un lment au-dessus de la pile (Push), retirer llment en haut de la pile (Pop), connatre llment en haut de la pile sans le retirer (Peek) compter le nombre dlments de la file

    cf. exemple 46

    dimanche 18 septembre 2011

  • CollectionsLes classes de base implmentant ICollection et IList

    Array

    List

    Queue

    Stack

    LinkedList

    BitArray

    HashSet

    Liste doublement chane

    ne possde pas dindexeur

    mais linsertion est rapide (sauf sil faut chercher o linsrer)

    cf. exemple 47

    dimanche 18 septembre 2011

  • CollectionsLes classes de base implmentant ICollection et IList

    Array

    List

    Queue

    Stack

    LinkedList

    BitArray

    HashSet

    Champ de bits

    dimanche 18 septembre 2011

  • CollectionsLes classes de base implmentant ICollection et IList

    Array

    List

    Queue

    Stack

    LinkedList

    BitArray

    HashSet

    mme ide que la table de hachage sans la valeur...

    dimanche 18 septembre 2011

  • CollectionsLes classes de base implmentant ICollection et IList

    Array

    List

    Queue

    Stack

    LinkedList

    BitArray

    HashSet

    La classe de base la plus utilise

    rapide pour des insertions en fin de liste rapide en BinarySearch pour des listes tries lent pour des insertions cf. exemple 48

    dimanche 18 septembre 2011

  • CollectionsList

    public class List : IList{ public List (); public List (IEnumerable collection); public List (int capacity); public void Add (T item); public void AddRange (IEnumerable collection); public void Insert (int index, T item); public void InsertRange (int index, IEnumerable collection);

    public bool Remove (T item); public void RemoveAt (int index); public void RemoveRange (int index, int count); public int RemoveAll (Predicate match);

    public T this [int index] { get; set; } public List GetRange (int index, int count); public Enumerator GetEnumerator();

    ...}

    construction

    insertions

    enlever des lments

    indexer

    dimanche 18 septembre 2011

  • CollectionsList

    public class List : IList{ ...

    public T[] ToArray(); public void CopyTo (T[] array); (+2 autres) public ReadOnlyCollection AsReadOnly(); public List ConvertAll (Converter converter);

    public void Reverse(); public int Capacity { get; set; } public void TrimExcess(); public void Clear(); + recherches, tris comme dans Array, mais en mthodes dinstances}

    export et copie

    autres

    dimanche 18 septembre 2011

  • CollectionsReadOnlyCollection

    Permet de navoir accs une collection quen lecture

    Attention aux types rfrences !

    cf. exemple 49

    dimanche 18 septembre 2011

Recommended

View more >