![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Добрый день,
то ли у меня какие то проблемы с понятиями template, то ли проблемы у Visual Studio. Почему этот код не компилируется? В чем проблема? Или микрософт решила что шаблоны нужно поддерживать но не до конца. В чем дело, не могу понять.
заранее спасибо Это сообщение отредактировал(а) azesmcar - 25.11.2007, 13:45 |
||||
|
|||||
| 1stain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 8 Всего: 40 |
замени
p = new T(); на p = default(T); и будет тебе щасте -------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
error CS1031: Type expected |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Если просто прочитать то, то говорит компилятор - возникает простое желание написать:
Что означает, что мы требуем что бы параметр T имел паблик-конструктор без аргументов. |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
то же самое..а вообще, что за извращение? какого черта он проверяет что-то? Даже если я не вызываю функци CreateP. Может мне в дальнейшем понадобиться еще функцию Clear() вызвать к примеру для одного из моих классов. Мне и ее прописать наверху? А где мощь шаблонов C++? Добавлено через 6 минут и 56 секунд
вот так сработало а как заставить его к примеру работать для string -а ?? Нужна к примеру функция String.IsAscii()
что еще надо сверху добавить? Это сообщение отредактировал(а) azesmcar - 25.11.2007, 14:08 |
||||||
|
|||||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
azesmcar, создавай объект с помощью new и исполдьзуй where new. default в дженериках (как только что посмотре в МСДН
Ну не её, а интерфейс соответствующий по идее. В С++. А в С# - мощь дженериков C# |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
а как это если не секрет? пробовал так
говорит error CS0701: 'string' is not a valid constraint. A type used as a constraint must be an interface, a non-sealed class or a type parameter. А что ему надо то? |
||||
|
|||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Он же откровенно признался: |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Form он принял, а string нет..видимо string - sealed class.
честно говоря не проверял..надо проверить проблема во всяком случае решена, спасибо |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Упс. Не заметил :( Я не пойму - тебе нужны конкретно System.String? Тогда зачем дженерики? Если же нужно нечто с IsAscii (кстати, разве такое есть в System.String Добавлено через 1 минуту и 24 секунды Я чего-т не пойму - у тебя МСДН нету? Да и в любом случае по метаданным string-а VS в состоянии разрулить и показать его объявление. В частности sealed. |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
azesmcar, генерики и шаблоны - это разные понятия. Никто нигде не говорит, что генерики - это шаблоны, а шаблоны - это генерики. А если кто-то и говорит - значит он не знает предмета вопроса.
С таким же успехом можно говорить, что int - это тот же string, но другой... А что, разве не так? Ведь и int, и string - это же типы данных? Ну, значит, одно и то же. Или говорить, что массивы и перечисления - одно и то же... ну а отвечать на вопросы ИМХО вряд ли нужно и не полезно.... Нужно сначала почитать, что такое генерики вообще. Как знающему (как я полагаю) С++, могу предложить тебе, azesmcar, почитать Overview of Generics in C++ или стандарт ECMA-334 вопросы отпадут сами собой. ---------------------------------------------------------------------------------------------------------------------------------------- какой интерфейс? String поддерживает какие-нибудь интерфейсы, определяющие метод IsAscii() ? ============================================================================ P.S. Ну вы и поститесь, господа.... Как в чате.... Когда вы только ДУМАТЬ успеваете? Это сообщение отредактировал(а) tol05 - 25.11.2007, 14:58 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Насчёт IsAscii конкретно: Я говорил про другое (более общее): Имеем sealed-класс, с некоторым методом someMethod. Хотим юзать его и кучу других классов с методом someMethod как параметр дженерика. Пишем интерфейс с этим меотдом, для своих классов указываем, что мол реализуем сей интерфейс, для не своих пишем адаптеры (реализующие этот интерфейс и имеющие паблик-конструктор с параметром типа адаптируемого класса). Так лучше? What is it? |
|||
|
||||
| tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Если я правильно понял, ты имеешь в виду что-то типа следующего?
делаем
Да, это вариант, но ИМХО хлопотно. и если классов будет 40-50, то картинка будет неказистая вообще. А через месяц нужно добавить какой-то функциональности в одну треть классов и для них тоже в генерике этот функционал вызывать. Что делать? Писать еще один интерфейс. Апгрейдить классы по новой. И какие? Только дорабатываемые или все? В остальных писать просто заглушки? ИМХО проще реализовать нужный метод в самом генерике. А результаты работы этого метода будут зависеть от реального типа, на котором построен генерик. И код проще будет, и типы подставлять легче. -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Это классические адапторы |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |