Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C# - при наследовании один метод не реализуется

Юрий Шихалеев Профи (967), на голосовании 7 месяцев назад
SelectedIndexCollection откройте описание этого класса. Он наследуется от IList.
Сам IList содержит метод RemoveAt, который, почему-то отсутствует в SelectedIndexCollection. Все остальные есть (Add, this[int index], Clear, Contains, IndexOf, Remove...)
Как такое может быть допустимо? На сколько я знаю, в классе обязательно должны быть описаны ВСЕ методы из родительского интерфейса. Почему в классе отсутствует метод RemoveAt и это не вызывает ошибку при компиляции?
Голосование за лучший ответ
Jurijus Zaksas Искусственный Интеллект (440710) 8 месяцев назад
>На сколько я знаю, в классе обязательно должны быть описаны ВСЕ методы из родительского интерфейса.
Неправильно знаешь. Ничто не мешает реализовать часть методов в классе-предке, в частичном классе, и, возможно, даже в классе-хелпере, хотя не знаю - не проверял.
Юрий ШихалеевПрофи (967) 8 месяцев назад
Ну вот я сейчас создал интерфейс
     interface Interface1 
{
int index { get; set; }
void method();
}
Затем вот такой класс
     class Class1:Interface1 
{
}
В результате запуска вижу 2 ошибки:
 "App.Class1" не реализует член интерфейса "App.Interface1.method()"
и
"App.Class1" не реализует член интерфейса "App.Interface1.index"
Значит, всё таки нельзя оставлять методы без реализации.
 SelectedIndexCollection: IList 
где только RemoveAt не реализован и всё чудесным образом работает. Разработчики как-то это сделать сумели.
Jurijus Zaksas Искусственный Интеллект (440710) Это не то, что я имел ввиду. А вот это - то: И вот так - тоже можно:Как видишь, ничего не подчеркнуто, все фурычит.
Юрий ШихалеевПрофи (967) 8 месяцев назад
 public interface IList : ICollection, IEnumerable
{
int Add(object value);
void Clear();
bool Contains(object value);
int IndexOf(object value);
void Insert(int index, object value);
void Remove(object value);
void RemoveAt(int index);
}

public class SelectedIndexCollection : IList
{
public int Add(int itemIndex);
public void Clear();
public bool Contains(int selectedIndex);
public int IndexOf(int selectedIndex);
public void Remove(int itemIndex);
}
Если я сейчас так создам, напишут, что реализация RemoveAt отсутствует в SelectedIndexCollection, наследуемым от IList.
Юрий ШихалеевПрофи (967) 8 месяцев назад
Ведь они как-то же обошли это правило.
Jurijus Zaksas Искусственный Интеллект (440710) Не, вру. Но! Там есть эта реализация:
 void IList.RemoveAt(int index) 
{ 
    throw new NotSupportedException(); 
} 
Но "снаружи" ее волшебным образом не видно, почему - пока не могу понять.
Похожие вопросы