29 minutes ago, 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.