Base types, Collections, Diagnostics, IO, RegEx…
Recently, somebody asked me why IComparable<T> does not extend IEquatable<T>. Here is this piece of history.
When we were designing IComparer<T> and IEqualityComparer<T>, we observed that these two interfaces are rarely (never?) consumed together. Collections that sort consume IComparer<T>; collections that don’t sort, consume IEqualityComparer<T>. If IComparer<T> extended IEqualityComparer<T>, users who want to implement a custom comparer to be used in a sorting collection would have to implement both interfaces, even though they would typically case less what the Equal method does.
Because of that we decided to leave IEqualityComparer<T> and IComparer<T> independent and we did the same thing with IComparable<T> and IEquatable<T> for consistency.