Есть достаточно интересный
тред по этому поводу, но он с уклоном в Java.
Сейчас я создаю интерфейсы для всех классов, объекты которых могут передаваться в методы или храниться в полях. То есть вместо такой типизации:
SomeMethod(Some p) {...}
Стараюсь использовать контракт:
SomeMethod(ISome p) {...}
При этом ISome заведомо будет реализован только классом Some. Единственное, что в ISome я пропишу лишь публичные методы.
Имеет ли это практический смысл в C#?