If you decide "Program to An Interface" trumps YAGNI and decide to create a supertype where you don't envision anything other than one obvious implementation - is there a convention for naming the obvious concrete type? E.g. this morning I wrote a a class called PlainOldConversionReport and I wonder if that name betrays ignorance of convention. Would there a more normal name, in Object Oriented development generally or .Net or C# specifically, to give to a non specialized subtype of IConversionReport?
For IConversionReport, I'd simply use ConversionReport. I guess you know this already, but IXXXX and XXXX is a bit of a code smell. I think you should probably think a bit harder to see if there's a better name that gives some hint of what the implementation is (or drop the interface if you're neither doing any composition nor swapping out different implementations).
I use a prefix of
I clearly misread the question. My apologies. If there is a simple, bog-standard implementation for the ConversionReport, I'd simply call it ConversionReport or StandardConversionReport and call the SuperType BaseConversionReport (or ConversionReportBase.)