Eu sei que a convenção "I" existe desde COM, mas nunca entendi por que ela não foi reconsiderada como todas as outras convenções de nomenclatura anteriores ao .NET.
Em termos de consumo, a única coisa que separa uma interface de, digamos, uma classe abstrata, é que elas podem ser multiplicadas por herança. Mas tudo depois do Visual Studio 2003 mostrou assinaturas de tipo nas dicas de ferramentas, por isso é tão inútil quanto todas as outras notações húngaras que foram descartadas.
Eu também pensei que poderia ser para que você pudesse ter uma implementação básica da interface com o mesmo nome, por exemplo , Message
herdar IMessage
, mas a maioria das bibliotecas do .NET optou por adicionar a palavra "Base" no final (por exemplo System.Collections.ReadOnlyCollectionBase
) - e isso faz mais sentido semântico.
A interoperabilidade COM parece ser outro motivo possível - mas não é como se as classes de wrapper que ele gerasse fossem .NET perfeitamente idiomáticas, então duvido que essa tenha sido uma consideração estética.
Em um dos meus projetos mais recentes, perdi completamente a convenção e ela parece bem. Tem algo que estou perdendo?
IList
é um termo geral para uma coleção seqüencial e contígua, de acesso aleatório, enquanto que List
é uma coleção sequencial, contínua e contígua de acesso aleatório e crescente . Eu acho que o F # tinha razão em usar alias List
para ResizeArray
; esse é definitivamente um nome muito mais descritivo. IList
então poderia ter sido List
, de modo que não parece que seria uma razão também.