Здравствуйте, DarkGray, Вы писали:
DG>в mainstream-языках это дает возможность статически проверять типы при возвращении интерфейса
DG>если интерфейсы отнаследованы друг от друга
DG>DG>interface IEnumerable{ void Foo();}
DG>interface ICollection:IEnumerable{void Bar();}
DG>
DG>то функция возвращая ICollection, предоставит статически проверяемую возможность обратиться как к методам ICollection, так и к методам IEnumerable
DG>DG>ICollection GetItems(){..}
DG>var items = GetItems();
DG>items.Foo();
DG>items.Bar();
DG>
DG>если же интерфейсы независимы
DG>DG>interface IEnumerable{ void Foo();}
DG>interface ICollection{void Bar();}
DG>
DG>то функция сможет вернуть только или IEnumerable, или ICollection, и придется явно кастить, чтобы получить доступ к другому интерфейсу
Что в этих мейнстрим языках уже решается через генерики
Нет, я понимаю, что "интерфейсы здесь были раньше". Т.е. если причины чисто исторические — ОК, такой ответ принимается. Вопрос, есть ли какие другие причины, кроме "а раньше мы по-другому не умели".