I don’t like the “Base” suffix

Today, I was reviewing a set of recommendation for naming types intended to be inherited from. The author suggested using the “Base” suffix for such types. I personally don’t like to do this. Here are the reasons:

First, what do you call base of a base class? Or what do you call an abstract subclass of a base class? The problem with the base suffix is that in many cases, “bases” end up being in the middle of the inheritance hierarchy.

Secondly, base types are often used as return types. When that happens, the “Base” suffix is meaningless. The suffix is only meaningful for those who inherit from the type (not many people) and not so much for those who use the type (many people). For example, property typed as the “base” type seems strange to me:

public CollectionBase<string> Names {
get { … }
}

I find the following much better.

public Collection<string> Names {
get { … }
}