[C#] методы интерфейса не доступны у класса

6yrop

Как такое может быть? Класс System.Array реализует интерфейс System.Collections.IList, но у переменной типа Array не доступен, например, метод IList.Contains?

xz_post

нет, реализован System.Array.System.Collections.IList.Contains(Object) : Boolean
для вызова нужно приводить к интерфейсу

6yrop

Извиняюсь. Разобрался. До этого не сталкивался с Explicit interface member implementations
тему можно закрывать

Dmitriy71

Это такая дурацкая особенность .net, которая выглядит совершенно неестественно и была, как говорят, введена только для того, чтобы не загромождать документацию стандартных классов, т.к. по мнению авторов это могло бы отпугнуть разработчиков от .net. Например, такой "простой" тип как Int32 содержит только 5 методов (согласно документации но в действительности их больше. Так, Int32 реализует еще 15 методов интерфейса IConvertible, но их можно вызвать, только после явного приведения к IConvertible.

bleyman

>> Это такая дурацкая особенность .net, которая выглядит совершенно неестественно
Ваще-то это нужно, чтобы ты мог отнаследоваться от двух разных интерфейсов, содержащих функции с одинаковыми именами. Вот уж не знаю, где ты слышал про "загромождение документации стандартных классов".

xz_post

Вот уж не знаю, где ты слышал про "загромождение документации стандартных классов
у самого Рихтера есть такая фраза...
Оставить комментарий
Имя или ник:
Комментарий: