, W3bbo wrote

*snip*

I believe that class/struct names should reflect their implementation concept/theory, but that interface types shouldn't. That isn't the same thing as "exposing implementation details" like fields.

I don't really agree with hiding implementation details for collections either. It's very important for the consumer of the collection to know if a list uses a linked list or array, because the difference in algorithmic complexity between the data structure operations could mean order of magnitude(s) worse performance depending on how they are used.