Es útil para las pruebas.
Un método puede tomar un parámetro del tipo ISomething, y puede ser SqlSomething o XmlSomething, donde ISomething es la interfaz, y SqlSomething y XmlSomething son clases que implementan la interfaz, dependiendo de si está haciendo pruebas (pasa XmlSomething en este caso) o ejecutar la aplicación (SqlSomething).
Además, al construir un proyecto universal, que puede funcionar en cualquier base de datos, pero no está utilizando una herramienta ORM como LINQ (tal vez porque el motor de base de datos puede no ser compatible con LINQ a SQL), defina interfaces, con métodos que lo usas en la aplicación. Más adelante, los desarrolladores implementarán las interfaces para trabajar con la base de datos, crearán la clase MySQLProductRepository, la clase PostgreSQLProductRepository, que heredarán la misma interfaz, pero tienen diferentes funcionalidades.
En el código de la aplicación, cualquier método toma un parámetro un objeto de repositorio de tipo IProductRepository, que puede ser cualquier cosa.
¿Tiene algunos ejemplos? Recomiendo leer esta respuesta ace: http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface/384067#384067 –
Si son clases COM, esto es normal (léase: tipo de requerido). –
Posible duplicado de [¿Es la mejor práctica extraer una interfaz para cada clase?] (Http://stackoverflow.com/questions/3036749/is-it-the-best-practice-to-extract-an-interface- for-every-class) – DavidRR