Langage C#

Collection & Générique
Syrine Khiari-Sami Ayari ESPRIT
2011-2012

1

Objectif de ce cours

Contrôlez un groupe de données associées dans une application .NET en employant les collections. Améliorez la sûreté de type et l'exécution d'application .NET en employant les collections génériques. Contrôlez les données dans une application .NET en employant les collections spécialisées. Employez les collections et choisissez la meilleure classe de collection pour différentes conditions. Employez les dictionnaires et choisissez la meilleure classe de dictionnaire pour différentes conditions.
2

Lors du choix de la façon dont vous souhaitez regrouper vos objets. 3 . vous devez d'abord penser à ce que vous voulez faire avec vos objets. Le.Les Collections! Une collection est un objet qui vous permet simplement de regrouper d'autres objets. NET Framework fournit des classes spécialisées pour le stockage des données et la récupération.

4 . first-out (FIFO) collection: Vous pourriez employer une file d'attente sur une transmission de messages serveur pour stocker des messages temporairement avant le traitement ou pour dépister des ordres de client ce besoin d'être traité sur un du premier arrivé. Les instances augmentent à n'importe quelle capacité exigée. Queue A first-in. premier-servent la base.Les collections ArrayList :Une collection simple qui peut stocker n'importe quel type d'objet.

StringCollection ne supporte pas le trie. StringCollection: comme ArrayList. BitArray: une collection de valeurs booléennes. 5 .Les collections Stack A last-in. first-out (LIFO) collection: vous pourriez employer une pile pour dépister des changements de sorte que le changement le plus récent puisse être défait. à moins que des valeurs soient fortement typées comme des string.

ArrayList al = new ArrayList().ArrayList la classe ArrayList ( dans le namespace System.Count + " items:").ToString()).WriteLine("The array has " + al.Add("World").Collections) permet d'ajouter les objets qui peuvent être consultés directement en utilisant un index ou être consultés dans une série en utilisant un foreach. foreach (object s in al) {Console. al. La capacité d'un ArrayList augmente selon les besoins.Add("Hello").Add(5).WriteLine(s. al. Console. al.} 6 .

ArrayList Dans la pratique. al.Add("is"). al. ArrayList al = new ArrayList().Sort().ToString()). al.Add("Hello"). al.Insert(4. "not"). Vous pouvez utiliser la méthode Remove pour supprimer un objet et la méthode Insert pour ajouter un élément à l'endroit indiqué dans l'index.Remove("test").Add("test"). al. vous ajoutez généralement des articles d'un type unique à un ArrayList. foreach (object s in al) Console.WriteLine(s. al. 7 . al.Add("this"). al.Add("a").Add("World"). al. Ceci vous permet d’appeler la méthode Sort pour trier les objets.

"this".BinarySearch("this")).Contains renvoie vrai si l'ArrayList contient l'objet indiqué sinon faux.AddRange(new string[] {"Hello". "test"}). al.ArrayList •Vous pouvez également appeler la méthode ArrayList.WriteLine(al.Reverse pour inverser l'ordre courant des articles dedans. •Vous pouvez appeler la méthode d'ArrayList. 8 . la méthode ArrayList. ArrayList al = new ArrayList(). "a". BinarySearch renvoie l'index de l'article. "is". •De même.BinarySearch. Console. "world".

Peek pour accéder à un objet sans le supprimer. La classe Queue utilise les méthodes Enqueue et Dequeue pour ajouter et supprimer des objets. tant que la classe Stack utilise les méthodes Push et Pop. Vous pouvez utiliser aussi Queue.Peek et Stack.Clear et Stack. La classe Queue emploie un ordre FIFO.Collections.Queue et Stack Les classes Queue et Stack sont situées dans le namespace de System.Clear pour supprimer tout les objets. 9 . alors que la classe Stack emploie un ordre LIFO. On utilise Queue.

i <= 3. for (int i = 1. Console. q.Push("just testing").WriteLine(q.WriteLine("Stack demonstration:").Pop(). s.Enqueue("just testing"). 10 . i <= 3.Push("world").WriteLine("Queue demonstration:"). Console. s. i++) Console.Queue et Stack Queue q = new Queue().Enqueue("Hello").Dequeue(). Stack s = new Stack().Enqueue("world"). q.Push("Hello").ToString()).ToString()). s. for (int i = 1.WriteLine(s. q. i++) Console.

òu chaque élément presente true ou false. utilisez BitVector32 à chaque fois vous avez besoin de 32 éléments ou moin. Si vous avez besoin de sauvegarder des valeurs booléenes. sinon utilisez BitArray. BitArray peut prendre n’importe quel taille.BitArray et BitVector32 BitArray est un tableau de valeurs boolénnes. 11 . cependant BitVector32 est limité à 32 bits exactement.

12 .Les Dictionnaires Les dictionnaires mappent les clés à des valeurs.NET comporte les dictionnaires suivants: Hashtable: un dictionnaire de nom/valeur paires qui peut être recherché par nom ou index. Le framework . SortedList: un dictionnaire peut être trié automatiquement par clé. StringDictionary: un hashtable avec nom/valeur paires implementé avec un typage fort string.

13 . NameValueCollection: un dictionnaire de nom/valeur pairess de chaine de caractéres qui permet de récupérer par nom ou index.Les Dictionnaires ListDictionary: un dictionnaire optimisé pour des petites listes d’objets moin de 10 éléments. HybridDictionary: un dictionnaire qui utilise ListDictionary pour le sauvegarde des éléments quand le nombre des éléments est petit et sera automatiquement switché à un Hashtable quand la liste se développe.

Il faut retenir que ce code de hachage est spécifique à chaque instance d'objet. 14 .La classe Hashtable Le Hashcode d'un objet est un nombre retourné par la méthode GetHashCode de la classe Object.

sl. foreach (DictionaryEntry de in sl) {Console."). sl. 15 .} Console. "Represents a LIFO collection of objects. Console.Add("SortedList".Value).Add("Queue". "Represents a collection of key/value pairs. sl.Add("Stack".WriteLine(de.WriteLine(sl.GetByIndex(0)).WriteLine(sl["Queue"])."). SortedList est trié automatiquement par la clé .Collections namespace) est un dictionnaire qui consiste à un clé/valeur paires. "Represents a FIFO collection of objects. SortedList sl = new SortedList().la classe SortedList SortedList (dans System."). Le clé et la valeur peuvent être des objets.

la classe ListDictionary • la classe ListDictionary (dans le namespace de System.Specialized) aussi fournit des fonctionnalités semblables. et est optimisé pour exécuter mieux avec des listes de moins que 10 articles.Collections. 16 .

Collections. 17 .la classe HybridDictionary • HybridDictionary (dans le namespace de System.Specialized) fournit la même exécution que ListDictionary avec des petites listes. mais il change de comportement lorsque la liste augmente.

Collections.Specialized) fournit des fonctionnalités semblables à SortedList.la classe StringDictionary • StringDictionary (dans le namespace de System. 18 . et exige des clés et des valeurs de type chaine de caractères. sans trier le dictionnaire automatique.

sl. sl."). 19 ."). "Represents a FIFO collection of objects.Add("Stack". a line. mais il vous permet d'employer une chaine de caractères ou un nombre entier pour les clés."). sl. "In England. En outre.la classe NameValueCollection • NameValueCollection fournit également des fonctionnalités semblables.GetValues(0)) Console. "Represents a LIFO collection of objects.Add("Queue". "A pile of pancakes.GetValues("Queue")) Console.WriteLine(s). "Represents a collection of key/value pairs. foreach (string s in sl. foreach (string s in sl. vous pouvez avoir plusieurs valeurs de type chaine de caractères pour un seul clé. NameValueCollection sl = new NameValueCollection().Add("Stack".")."). sl. sl.Add("Queue".Add("SortedList".WriteLine(s).

Création d’une carte de crédit Hands-on Lab. Exercice #1: En utilisant un ArrayList .

Cependant. Ceci simplifie le développement . et peuvent améliorer l'exécution en réduisant la nécessité de casting. aide à assurer l'utilisation appropriée des types. y compris les classes crées par le développeur. l'accès à la collection exige que vous castez le type d'objet au type correct. Non seulement ça complique la programmation et ça augmente le risque d’erreur mais aussi ça dégrade les performances. vous pouvez créer des collections fortement typées pour n'importe quelle classe. 21 .Generic Collections • Les collections comme ArrayList permettre de travailler avec tout type. • En utilisant les generiques.

Generic Collection Classes 22 .

Add("Three".Add("Two". 2).U> Collection SortedList<string. 1). sl. 23 .WriteLine(i.int>(). foreach (int i in sl. int> sl = new SortedList<string. 3).Values) Console.ToString()).Add("One". sl.Generic SortedList<T. sl.

public person(string _firstName. string lastName. new person("Zsolt".ToString()). sl. foreach (person p in sl. new person("Kim".Using Generics with Custom Classes public class person { string firstName.person>(). new person("Mark". person> sl = new SortedList<string. } override public string ToString() { return firstName + " " + lastName. string _lastName) { firstName = _firstName.Add("Two". 24 . "Hanson")). sl. lastName = _lastName.Values) Console.Add("One". sl. }} SortedList<string. "Akers")).WriteLine(p.Add("Three". "Ambrus")).

Generic Queue<T> and Stack<T> Collections Queue<person> q = new Queue<person>(). i <= 3. s.WriteLine("Queue demonstration:"). Console. q.Dequeue().Enqueue(new person("Kim". q. 25 . "Ambrus")). "Ambrus")). q. "Akers")).Enqueue(new person("Zsolt".WriteLine(s. s.WriteLine(q.Push(new person("Mark". "Hanson")). s.Push(new person("Zsolt".WriteLine("Stack demonstration:"). i++) Console. i++) Console. "Akers")).Push(new person("Kim".ToString()). "Hanson")).Enqueue(new person("Mark". Console.ToString()). Stack<person> s = new Stack<person>(). i <= 3. for (int i = 1. for (int i = 1.Pop().

Création d’une carte de crédit avec les génériques Hands-on Lab. Exercice #1: En utilisant un Generic List<T> .

Sign up to vote on this title
UsefulNot useful