Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ой! А как же реализовать IEnumerable<int>? 
V
    Опции темы
Dims
Дата 3.11.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Пытаюсь реализовать интерфейс IEnumerable<int>

Если я пишу так

Код

 public IEnumerator<int> GetEnumerator()
        {
            return new NumbersetEnumerator<int>(this);
        }
        


то она ругается

Код

'IndexRange' does not implement interface member 'System.Collections.IEnumerable.GetEnumerator()'. 
'IndexRange.GetEnumerator()' cannot implement 'System.Collections.IEnumerable.GetEnumerator()' 
because it does not have the matching return type of 'System.Collections.IEnumerator'.


а если я пишу так

Код

public IEnumerator GetEnumerator()
        {
            return new NumbersetEnumerator<int>(this);
        }


Код

'IndexRange' does not implement interface member 'System.Collections.Generic.IEnumerable<int>.GetEnumerator()'. 
'IndexRange.GetEnumerator()' cannot implement 'System.Collections.Generic.IEnumerable<int>.GetEnumerator()' 
because it does not have the matching return type of 'System.Collections.Generic.IEnumerator<int>'.


ну и, естественно, если я пишу оба метода, то она ругается, что повторяется метод.

Как выйти из этого замкнутого круга.

Это сообщение отредактировал(а) Dims - 3.11.2008, 22:30
PM MAIL   Вверх
Bogdan1024
Дата 3.11.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 3
Всего: 13



Код

public class Class1 : IEnumerable<int>
{
    public IEnumerator<int> GetEnumerator()
    {
        return (IEnumerator<int>)this.GetEnumerator();
    }


    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return new En();
    }
    private class En:IEnumerator<int> {...}
}


Добавлено через 38 секунд
Тоесть, один метод реализуется явно, а второй - неявно, с указанием интерфейса в качестве префикса.

Добавлено через 1 минуту и 57 секунд
А вообще когда прописал что класс реализует интерфейс, то если правой кнопкой клацнуть по интерфейсу, то там появится опция "Implement interface". Существенно облегчает роботу ;)


--------------------
user posted image
PM MAIL   Вверх
Dims
Дата 3.11.2008, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Цитата(Bogdan1024 @  3.11.2008,  22:34 Найти цитируемый пост)
Тоесть, один метод реализуется явно, а второй - неявно, с указанием интерфейса в качестве префикса

Я подумывал об этом, но что-то не верилось, что это так. 

Не знаю точно, но в Джаве в качестве рабочей гипотезы я исходил из того, что Type эквивалентно Type<Object>, то есть, "негенерикс" это генерикс с обжектами в качестве параметров.



Цитата(Bogdan1024 @  3.11.2008,  22:34 Найти цитируемый пост)
появится опция "Implement interface"

А вот об этом, можно сказать, мечтал, но не находил. В Джавных IDE эта опция находится там же, где находятся опции по автоматическому исправлению ошибок, а тут вона где...

PM MAIL   Вверх
Bogdan1024
Дата 3.11.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 3
Всего: 13



Цитата
Не знаю точно, но в Джаве в качестве рабочей гипотезы я исходил из того, что Type эквивалентно Type<Object>, то есть, "негенерикс" это генерикс с обжектами в качестве параметров.

Фигасе. Не знал что там так smile


--------------------
user posted image
PM MAIL   Вверх
Dims
Дата 3.11.2008, 23:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Цитата(Bogdan1024 @  3.11.2008,  23:38 Найти цитируемый пост)
Фигасе. Не знал что там так

Может, и нет. Но такое представление меня не подводило. smile

PM MAIL   Вверх
PashaPash
Дата 4.11.2008, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Dims, просто в C# IEnumerable появился до генериков. И до IEnumerable<T>.


--------------------
PM MAIL WWW   Вверх
Dims
Дата 4.11.2008, 04:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



В Джаве тоже самое. Сперва генериков не было, а уже появились всякие Iterable. И потом они как-то умудрились сделать с генериками совместимо. 
PM MAIL   Вверх
PashaPash
Дата 4.11.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Dims, именно совместимо? Вроде просто выбросили старые Iterable и заменили новым Iterable<T>. В .net замена не прошла, хз по каким причинам. ICollection и ICollection<T> например довольно сильно отличаются. Массивы в C# реализуют интерфейсы для коллекций, а в Java - нет. Разделение на Value/Reference Types добавляет своих плюшек - не уверен, в java можно параметризировать генерики примитивными типами?


--------------------
PM MAIL WWW   Вверх
Dims
Дата 4.11.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Новые классы, конечно, написали. Но при этом новые классы позволяют не указывать тип-параметр и тогда будет Object.

В Джаве нельзя параметризовать генерики примитивными типами. Но там у каждого примитивного типа есть "непримитивный" аналог, который можно использовать. При этом эти непримитивные типы образуют логичную иерархию, то есть, все числовые типы являются наследниками Number. Соответственно, можно написать генерик, который позволяет себя параметризовать только числами. В Си# я не нашёл способа сделать так.

А в Си# разве нет разделения на ссылочные и нессылочные типы?




PM MAIL   Вверх
PashaPash
Дата 5.11.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Dims, смотри в чем проблема: есть у тебя класс-генерик с методом public T Current. Ты параметризуешь его int. При этом генерируемый jit-ом код должен вернуть само значение int, а не boxed int. Потом ты решаешь что раз int унаследован от object, то Current<int> должен быть обратно совместим с Current<object>. Но раз он возращает object, то должен делать boxing результата. Т.е. код метода возвращающего int не совместим с возвратом object. То же и с параметрами.
Number тоже не решает проблемы - есть еще структуры.

Это сообщение отредактировал(а) PashaPash - 5.11.2008, 00:35


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.