When and Why to Use Types Instead of Interfaces in C#