Wiem, że konwencja „ja” istnieje od czasu COM, ale nigdy nie zrozumiałam, dlaczego nie została ponownie rozpatrzona, jak każda inna konwencja nazewnictwa przed .NET.
Jeśli chodzi o zużycie, jedyną rzeczą, która oddziela interfejs od, powiedzmy, klasy abstrakcyjnej, jest to, że można je wielokrotnie dziedziczyć. Ale wszystko po Visual Studio 2003 wyświetlało podpisy typu w etykietach narzędzi, więc jest tak bezużyteczne, jak wszystkie inne węgierskie notacje, które zostały odrzucone.
Pomyślałem również, że może to być tak, że możesz mieć podstawową implementację interfejsu o tej samej nazwie, np. MessageDziedziczenie IMessage, ale większość bibliotek .NET zdecydowała się na dodanie słowa „Base” na końcu (np. System.Collections.ReadOnlyCollectionBase) Zamiast - i to ma bardziej semantyczny sens.
Interoperacja COM wydaje się być kolejnym możliwym powodem - ale nie jest tak, że generowane przez nią klasy otoki są całkowicie idiomatyczne .NET, więc wątpię, aby była to uwaga estetyczna.
W jednym z moich nowych projektów całkowicie zapomniałem o konwencji i wydaje mi się, że jest w porządku. Czy czegoś brakuje?
IListto ogólny termin na sekwencyjną, ciągłą kolekcję, losowy dostęp, podczas gdy Listjest sekwencyjną, ciągłą, losową kolekcją rosnącą . Myślę, że F # miał rację, aliasing Listdo ResizeArray; to zdecydowanie bardziej opisowa nazwa. IListto mogło być List, więc to też nie wydaje się być powodem.