Когда классы содержат один и тот же набор параметров, может быть очень полезным определить общий контракт для всех классов. Разумеется, это делается при помощи интерфейса. Основные преимущества использования интерфейсов состоят в том, что ваш код становится более читабельным, его легче обслуживать, и работает он одинаково для похожих членов. Однако разработчики часто не понимают общности своих классов до тех пор, пока их код не написан. Это иногда делает создание интерфейсов весьма болезненной операцией.
Редактор C# в Visual Studio 2008 предоставляет операцию рефакторинга Extract Interface (извлечение интерфейса) для облегчения этого процесса. Она позволяет вам взять существующий класс или структуру и автоматически сгенерировать соответствующий интерфейс, который будет затем реализован существующим классом.