Я знаю, что соглашение «I» существует со времен COM, но я никогда не понимал, почему оно не было пересмотрено, как любое другое соглашение об именах до .NET.
С точки зрения потребления, единственное, что отделяет интерфейс, скажем, от абстрактного класса, - это то, что они могут наследоваться многократно. Но все, что появилось после Visual Studio 2003, показывало подписи типов во всплывающих подсказках, поэтому оно так же бесполезно, как и все другие венгерские нотации, которые были отброшены.
Я также подумал, что это может быть так, что у вас может быть базовая реализация интерфейса с тем же именем, например Message
наследование IMessage
, но большинство библиотек .NET пошли для добавления слова «Base» в конце (например System.Collections.ReadOnlyCollectionBase
) вместо этого - и это имеет более смысловой смысл.
COM-взаимодействие, кажется, еще одна возможная причина - но не то, чтобы создаваемые им классы-обертки были совершенно идиоматичными .NET, поэтому я сомневаюсь, что это было эстетическим соображением.
В одном из моих новых проектов я полностью отказался от соглашения, и это прекрасно. Я что-то пропустил?
IList
является общим термином для секвенировали, смежный сбор, произвольный доступа, в то время как List
это секвенировали, непрерывный, случайный доступ, растет сбор. Я думаю, что F # имел право в псевдониме List
к ResizeArray
; это определенно гораздо более описательное имя. IList
тогда могло бы быть List
, так что не похоже, что это тоже будет причиной.