Frederik is right que la mise en œuvre de List<T>
de IList
est explicite pour certains membres, en particulier ceux qui constituent une menace pour la sécurité de type.
L'implémentation qu'il suggère dans sa réponse ne peut pas être correcte, bien sûr, car elle ne compilerait pas.
Dans les cas de ce type, l'approche typique consiste à faire un vaillant effort vers , essayez pour que le membre de l'interface fonctionne, mais abandonnez si c'est impossible.
On notera que le procédé IList.Add
est définie pour revenir:
La position dans laquelle le nouvel élément a été inséré, ou -1 pour indiquer que l'élément n'a pas été inséré dans la collection.
Donc, en fait, une mise en œuvre complète est possible:
int IList.Add(object value)
{
if (value is T)
{
Add((T)value);
return Count - 1;
}
return -1;
}
Ceci est juste une supposition, bien sûr. (Si vous voulez vraiment savoir à coup sûr, vous pouvez toujours utiliser Reflector.) Il peut être légèrement différent; par exemple, il pourrait lancer un NotSupportedException
, ce qui est souvent fait pour des implémentations d'interface incomplètes telles que l'implémentation ReadOnlyCollection<T>
de IList<T>
. Mais puisque ce qui précède répond aux exigences documentées de IList.Add
, je soupçonne qu'il est proche de la réalité.
Je ne suis pas sûr de ce que vous voulez dire en ne l'exposant pas, les interfaces ne peuvent avoir que des membres publics. –
@Brad: 'List' n'est pas une interface, et il dit que 'List ' ne devrait pas l'exposer. –
Il est appelé "Implémentation d'interface explicite". – codymanix