Bonjour,
Lorsque je type un champ que ce soit dans une class ou une interface,
quelle est la difference entre :
List myList; et IList myList.
Merci
Bonjour,
Lorsque je type un champ que ce soit dans une class ou une interface,
quelle est la difference entre :
List myList; et IList myList.
Merci
List est une classe.
IList est une interface.
List implémente l'interface IList, mais il y a d'autres classes du Framework qui implémentent IList, comm la classe Array par exemple.
je sais bien que ilist est une interface.
Quelle est l'interet de typer un champs en Ilist ? sachant qu'on ne vas rien redefinir ?
Un bon exemple de déclaration des variables par l'interface c'est le pattern Factory.
Tu déclares une variable bd de type IDbConnection.
Tu lis dans un fichier Xml le type de BDD (MySql, Oracle, SqlServer), et tu appelles une méthode de factory en lui passant en paramètre ce que tu as lu dans ton fichier.
En fonction du paramètre qui lui est passé, la factory construit et retourne un objet OracleDbConnection, MySqlDbConnection ou SqlServerDbConnection. Le point commun entre ces 3 types est qu'il satisfont tous l'interface IDbConnection.
Ensuite, tu pourras utiliser ta variable db dans ton code source sans te soucier des spécificités relative à tel ou tel SGBD.
L'interet, c'est que tu te donnes la liberte de ne pas figer ton interface...
Par ex., pour le moment, tu renvoies une list, donc, ton client (l'autre morceau de code qui appelle ta fonction), attends une liste en retour.
Si demain, pour une raison ou une autre, tu veux renvoyer une SortedList, tu dois changer tous tes clients, parce que tu as change le type de retour de ta fonction. Si le type de retour est une IList, tes clients, qui vont probablement juste utiliser un foreach, ne seront pas obliges de changer leur code.
En d'autres termes, tu ne déclares pas ta variable myList comme étant du type List, mais comme étant de n'importe quel type, pourvu qu'il satisfasse le contrat (interface) IList.
Partager