![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Dims |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Пытаюсь реализовать интерфейс IEnumerable<int>
Если я пишу так
то она ругается
а если я пишу так
ну и, естественно, если я пишу оба метода, то она ругается, что повторяется метод. Как выйти из этого замкнутого круга. Это сообщение отредактировал(а) Dims - 3.11.2008, 22:30 |
||||||||
|
|||||||||
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 3 Всего: 13 |
Добавлено через 38 секунд Тоесть, один метод реализуется явно, а второй - неявно, с указанием интерфейса в качестве префикса. Добавлено через 1 минуту и 57 секунд А вообще когда прописал что класс реализует интерфейс, то если правой кнопкой клацнуть по интерфейсу, то там появится опция "Implement interface". Существенно облегчает роботу ;) -------------------- ![]() |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Я подумывал об этом, но что-то не верилось, что это так. Не знаю точно, но в Джаве в качестве рабочей гипотезы я исходил из того, что Type эквивалентно Type<Object>, то есть, "негенерикс" это генерикс с обжектами в качестве параметров. А вот об этом, можно сказать, мечтал, но не находил. В Джавных IDE эта опция находится там же, где находятся опции по автоматическому исправлению ошибок, а тут вона где... |
|||
|
||||
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 3 Всего: 13 |
Фигасе. Не знал что там так -------------------- ![]() |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
||||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Dims, просто в C# IEnumerable появился до генериков. И до IEnumerable<T>.
|
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
В Джаве тоже самое. Сперва генериков не было, а уже появились всякие Iterable. И потом они как-то умудрились сделать с генериками совместимо.
|
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Dims, именно совместимо? Вроде просто выбросили старые Iterable и заменили новым Iterable<T>. В .net замена не прошла, хз по каким причинам. ICollection и ICollection<T> например довольно сильно отличаются. Массивы в C# реализуют интерфейсы для коллекций, а в Java - нет. Разделение на Value/Reference Types добавляет своих плюшек - не уверен, в java можно параметризировать генерики примитивными типами?
|
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Новые классы, конечно, написали. Но при этом новые классы позволяют не указывать тип-параметр и тогда будет Object.
В Джаве нельзя параметризовать генерики примитивными типами. Но там у каждого примитивного типа есть "непримитивный" аналог, который можно использовать. При этом эти непримитивные типы образуют логичную иерархию, то есть, все числовые типы являются наследниками Number. Соответственно, можно написать генерик, который позволяет себя параметризовать только числами. В Си# я не нашёл способа сделать так. А в Си# разве нет разделения на ссылочные и нессылочные типы? |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |