Sé que la convención "I" ha existido desde COM, pero nunca he entendido por qué no se ha reconsiderado como cualquier otra convención de nombres antes .NET.
En cuanto al consumo, lo único que separa una interfaz de, por ejemplo, una clase abstracta, es que pueden heredarse de forma múltiple. Pero todo después de Visual Studio 2003 ha mostrado firmas de tipo en la información sobre herramientas, por lo que es tan inútil como todas las otras anotaciones húngaras que se han descartado.
También pensé que podría ser para que pueda tener una implementación básica de la interfaz con el mismo nombre, por ejemplo , Messageheredando IMessage, pero la mayoría de las bibliotecas .NET han optado por agregar la palabra "Base" al final (por ejemplo System.Collections.ReadOnlyCollectionBase). y esto tiene más sentido semántico.
La interoperabilidad COM parece ser otra razón posible, pero no es como si las clases de contenedor que genera son .NET perfectamente idiomáticas, por lo que dudo que haya sido una consideración estética.
En uno de mis proyectos más nuevos, he renunciado a la convención por completo, y se siente muy bien. ¿Se me escapa algo?
IListes un término general para una colección secuenciada, contigua, acceso aleatorio, mientras que Listes una colección secuenciada, contigua, aleatoria, en crecimiento . Creo F # tenía la razón en aliasing Lista ResizeArray; ese es definitivamente un nombre mucho más descriptivo. IListentonces podría haber sido List, así que tampoco parece ser una razón.