Avoid prefixing or suffixing classes unless:
- It is an interface:
IFilter
- You need to communicate that it is participating in a pattern:
GaussianBlurStrategy
- (from marc_s) You create a custom exception:
ImageDoesNotSupportFilterTypeException
- Sometimes to communicate if something is an abstract base class:
FilterBase
I'm torn on that last one. I don't like seeing the Base suffix, but it's really hard for a consumer of your API to know that they can't instantiate Filter (without trying it first) based on the name. I have no love for it, but it's a convention that I use.
EDIT
Per Jon B's comment, suffixing custom delegates with Handler
is common (FilterExecutedHandler(object sender, FilterEventArgs e);
). Although a delegate declaration isn't a class per se, it can cause name collission so should probably be stated here.