Просто на основе наследования, Вы использовали бы Краткий обзор, где Вы определяете ясно потомка, абстрактные отношения (т.е. животное-> кошка) и/или требуете наследования виртуальных или непубличных свойств, особенно общее состояние (который Интерфейсы не могут поддерживать).
необходимо попытаться одобрить состав (через внедрение зависимости) по наследованию, где Вы можете, хотя, и отмечают, что Интерфейсы, являющиеся контрактами, поддерживают поблочное тестирование, разделение проблем и (варьирование языка) множественное наследование способом, Краткие обзоры не могут.
string.Format
- ваш друг.
String.Format("{0:0.00}", 123.4567); // "123.46"
// just two decimal places
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"
http://www.csharp-examples.net/string-format-double/
edit
Понятия не имею, почему они использовали «String» вместо «string», но все остальное верно.