C# Design
After considering non-language specific design principals such as Robert Martin's Object-Oriented Design Principals, consider language specific items:
1. Do instances of the class under consideration need to be compared for equality?
If so make sure this class implements Equatable<T>.
1.a Do instances of the class under consideration need to be compared to other types?
If so make sure you provide an implementation of IEqualityComparer<T>
2. Do instances of your class under consideration need to be compared for ordering?
If so make sure this class implements IComparable<T>
2.a Does this class have more than one type of sorting order?
- If so make sure this class implements