Hola.
Si, son parecidas a las clases abstractas, pero la diferencia está en que en una clase abstracta podes definir metodos, funciones eventos etc. En cambio en una interface solo definis los metodos pero no su funcionalidad. Para que veas un ejemplo muy simple pero es como para que veas más o menos su utilidad.
Supongamos que programas tu capa de datos y tenes tres tablas, Usuarios, Empleados y Productos. En tus clases vas a tener cosas comunes como buscar, eliminar etc. Podes entonces definir de una forma con interfaces para que cada clase de estas tablas tengas estos metodos nombrados, entonces la interfas tendría más o menos esto:
interface IAccesoDatos
{
DataSet ObtenerTodos();
void Borrar(int ID);
DataTable BuscarUno(int ID);
}
Luego cuando creas tu clase de acceso a Datos supongamos para Usuarios te quedaría así:
Public Class EmpleadosDatos: IAccesoDatos
{
Public DataSet ObtenerTodos()
{
..............
}
// Los otro metodos de la interface .....
}
Entonces así todas las clase de datos que armes y usen la interface de datos tendran que definir los metodos de dichas interfaces. Si lo armas en visual studio por ejemplo cuando agregas a una clase que hereda de una interface te da la opcion de que te agrege automáticamente lo metodos para que no los escribas vos ahorrandote tiempo de repetir esta tarea a mano en las otras clases.
Ademas lo bueno de esto es que a diferencia de las clases abstractas, una clase puede heredar de VARIAS interfaces.
Esto es un ejemplo sencillo, podes ver mas respuestas seguro acá y ver algo acá:
http://msdn.microsoft.com/es-es/libr...56(VS.80).aspx