Je sais que la convention «I» existe depuis COM, mais je n'ai jamais compris pourquoi elle n'a pas été reconsidérée comme toutes les autres conventions de dénomination avant .NET.
Du point de vue de la consommation, la seule chose qui sépare une interface, disons, d'une classe abstraite, c'est qu'elles peuvent être multipliées par héritage. Mais tout ce qui après Visual Studio 2003 a montré des signatures de type dans les info-bulles, c'est donc aussi inutile que toutes les autres notations hongroises qui ont été ignorées.
J'ai également pensé que cela pourrait être pour que vous puissiez avoir une implémentation de base de l'interface avec le même nom, par exemple Message
héritant IMessage
, mais la plupart des bibliothèques .NET ont opté pour l'ajout du mot "Base" à la fin (par exemple System.Collections.ReadOnlyCollectionBase
) à la place - et cela a plus de sens sémantique.
L'interopérabilité COM semble être une autre raison possible - mais ce n'est pas comme si les classes wrapper qu'il génère étaient parfaitement idiomatiques .NET, donc je doute que c'était une considération esthétique.
Dans l'un de mes projets les plus récents, j'ai complètement abandonné la convention, et cela me semble très bien. Y a-t-il quelque chose qui me manque?
IList
est un terme général pour une collection séquentielle, contiguë, à accès aléatoire, alors qu'il List
s'agit d'une collection croissante , contiguë, à accès aléatoire, croissante . Je pense que F # avait raison dans l' aliasing List
à ResizeArray
; c'est certainement un nom beaucoup plus descriptif. IList
cela aurait pu l'être List
, donc cela ne semble pas non plus être une raison.