public class ContactList : IEnumerable<Contact> {
List<Contact> m_list;
IEnumerator<Contact> IEnumerable<Contact>.GetEnumerator() {
return m_list.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
return m_list.GetEnumerator();
}
}
C#: наследование от IEnumerable<T>
Visual Studio 2005, C#, .NET Framework 2.0
Есть класс - список объектов:
//------------------------------------------------------------------------
class ContactList : IEnumerable<Contact>
{
private List<Contact> m_contacts;
...
public IEnumerator<Contact> GetEnumerator()
{
return m_contacts.GetEnumerator;
};
...
}
//------------------------------------------------------------------------
При компиляции компилятор выдаёт ошибку:
error CS0536: 'ContactList' does not implement interface member 'System.Collections.IEnumerable.GetEnumerator()'. 'ContactList.GetEnumerator()' is either static, not public, or has the wrong return type.
Пробовал менять public, ставить virtual, override ... Появляются другие ошибки, но класс не компилируется.
Буду признателен, если кто-нибудь объяснит почему.
Вот требования, которые я хочу видеть в классе:
1. Класс должен поддерживать перебор элементов при помощи foreach.
2. Класс должен поддерживать только перебор элементов (без удаления, добавления...)
Ещё вижу вариант - произвести от List<Contact> и переопределить ненужные методы через protected. Но этот вариант мне не очень нравится.
ps. Не скажу что я спец по C#, но C++ знаю хорошо, и с шаблонами там разобрался. А здесь... Вообщем, I need Help.
Код: