![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| VOX |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 21.1.2009 Репутация: нет Всего: 1 |
Здравствуйте дорогие участники конференции!
У меня возник вопрос по языку C#. Вопрос касается такой возможности как делегаты. Я умею с помощью этого инструмента ссылкаться на ф-ии, но как я помню, делегаты являются неким подобием указателей из с++, с помощью указателей можно было ссылаться на переменные, т.е. взять адрес переменной из памяти, можно ли выполнить подобное на С#. Спасибо! |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
да, можно. Делегаты - это стандартный тип данных в CLR (на равне с классами, структурами, интерфейсами...). Можно объявить тип делегата и использовать этот тип как и любой другой параметр метода
вот можно почитать -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Skynin |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
В C# нет функций. Хотя их можно эмулировать с помощью статических методов.
Да, некое подобие с "указателем на функцию" есть. Но делегат умеет хранить больше одного "указателя", и хранит еще и ссылку на объект, у которого нужно вызывать метод.
В C# нет адресной арифметики. Переменные делятся на 2 вида - "значения" и "ссылочные". Для первых есть частные случаи получения адреса, например при передаче в метод по ссылке (модификаторы ref и out). Ссылочные переменные и так - ссылки. Есть возможность создания неуправляемых секций кода, но нужно это крайне редко. Совет - забудьте на время аналогии с С++, и изучайте С# как свой первый язык программирования в жизни. Аналогии с С++ только запутают, это весьма разные языки, только на вид похожие.(ну и потому что императивные и объектно-ориентированные) Это сообщение отредактировал(а) Skynin - 30.11.2009, 12:53 |
||||||
|
|||||||
| VOX |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 21.1.2009 Репутация: нет Всего: 1 |
Я всё понял, спасибо! +++
Добавлено через 3 минуты и 49 секунд хотя вот хотел бы уточнить...
каким образом можно вывести через делегат на консоль значение переменной integer? |
|||
|
||||
| mrbrooks |
|
||||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 17 Всего: 306 |
up
но в чем прикол? Это сообщение отредактировал(а) mrbrooks - 30.11.2009, 13:15 |
||||
|
|||||
| VOX |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 21.1.2009 Репутация: нет Всего: 1 |
да думал нюанс какой-ть есть интересный!
Спасибо! Но вот по этой ссылкеhttp://forum.vingrad.ru/forum/topic-281990...y2033726/0.html на топик этого же форума, нашел у парня в коде:
т.е. я могу в коде сишарп использовать указатели??? |
|||
|
||||
| Exai1e |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 4 Всего: 30 |
VOX, unsafe это не безопасный код, можно но не желательно
http://msdn.microsoft.com/ru-ru/library/chfa2zb8.aspx -------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
| Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
"Есть возможность создания неуправляемых секций кода, но нужно это крайне редко." Изучайте C#, а не С++! |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
VOX, а для чего? нет, я понимаю для чего они нужны в C/C++, но для чего они вам? |
|||
|
||||
| ДобренькийПапаша |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Почему нет? В смысле есть только методы? Если так, то поясните, пожалуйста, какая разница между функцией и методом в контексте платформы .NET. Ибо я много в какой литературе встречал мнение, что эти понятия идентичны. Их иногда различают, но крайне редко. -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
||||
|
|||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 17 Всего: 306 |
||||
|
||||
| VOX |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 21.1.2009 Репутация: нет Всего: 1 |
да, это так сказать аклиматизация ))) но гражданство всё же будет двойным )))
Всем спасибо за ответы! |
|||
|
||||
| Skynin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
1. В метод неявно передается ссылка на объект. 2. Выбор метода может осуществляться во время выполнения (virtual), а не компиляции.
Их различают весьма часто, чтобы подчеркнуть различие между структурным и объектно-ориентированным программированием. Вы какую-то не такую литературу читаете Есть в инете: Х. Дейтел - C# в подлиннике. Наиболее полное руководство (классического типа учебник, до занудства. По уровню вопросов - рекомендую начинать с него) Эндрю Троелсен Язык программирования С# 2008 и платформа .NET 3.5 (для начинающего вполне сойдет и ранняя версия по С# 2005 .NET 2.0) (рассказано не только о самом языке программирования, но и о структуре самой CLR .NET и об основных классах и семействах стандартной библиотеки) Если прочтете хотя бы по диагонали, то многие, в том числе и эти, вопросы отпадут. Это сообщение отредактировал(а) Skynin - 30.11.2009, 15:29 |
||||
|
|||||
| KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Значит static метод всё же функция...всегда забавляли эти названия - функции, функции члены, методы..) Это сообщение отредактировал(а) KelTron - 30.11.2009, 15:57 -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Я читал Троелсена и много чего читал, и считаю, что методы и функции одно и тоже. Те кто хотят видеть отличия должны всегда указывать это явно. В общем случае это одно и тоже. IMHO. (Если так Дейтел считает, то пусть считает и дальше, я не против
Это сообщение отредактировал(а) ДобренькийПапаша - 30.11.2009, 16:43 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| Skynin |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
Да, все есть CALL
3. Метод может изменить состояние объекта, ссылка на который неявно передана. 4. Внутри метода действуют правила доступности для полей объекта. А то что Вы считаете - дело такое. "Я знаю что такое секс, я читала" Новодворская Многие считают что знают С++, при этом используя его как Си с классами. И что с того? Контрольный вопрос на котором студенты на собеседовании спотыкаются: А есть ли отличия ссылок и указателей в С++, или это просто слова разные - и все 4ре года просиживания в ВУЗе сразу видны. Так и с делегатами - "указателями на функции". Не понял что такое делегаты и на тебе утечки памяти.
Как раз в общем случае и разное - см. мои 4ре пункта. А вот частный случай: метод с модификатором static - функция. Вобщем от неграмотности Ваши выводы и непонимание различий. Хотите научиться - научитесь. Хотите бравировать неграмотным пониманием - так и не будете понимать. Это сообщение отредактировал(а) Skynin - 30.11.2009, 17:24 |
||||||
|
|||||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Различия между указателями и ссылками понятны, конечно. Я понял какую разницу вы подразумеваете под методом и функцией.
Но тем не менее, ну не знаю, соглашусь всё-таки наверно, что различать эти понятия имеет смысл p.s. Я как-то не заострял внимание на этом различии, здесь дело терминологии. Может ли это на что-то серьёзно повлиять? Не заостряя внимания на этом различии, всё что до этого читал и прошу заметить делал, всё было понятно))) -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| Skynin |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
А ссылка не частный ли случай указателя? И почему же - конечно? Из моего опыта собеседований - очень даже многие - не понимают.
Терминология рождается из понимания различий, а не - придумал профессор словечко. Если не понимаешь различий - то действительно, какая разница между потенциальной и кинетической энергией? А между "энергией" понимаемой физиком и "энергией" понимаемой экстрасенсом - уверены что нет разницы? Или - между "заражением крови" и "сепсисом"? Поэтому подумайте - почему специалисты прибегают к терминологии, а неспециалисты вполне обходятся бытовой речью. (тоже кстати - а что за термин - бытовая?)
На карьеру - собеседование без понимания терминологии не пройдете. На осознанное применение возможностей языка программирования - гадкий код будет вполне оценен как гадкий, со всеми вытекающими последствиями, хотя программа - работает.
Ну тогда вместо разъяснений, в которых Вы явно не нуждаетесь, исходя из "все было понятно" (мне и сейчас многое непонятно, прямо завидую) - А кто такие проститутки? - спрашивает 5летняя Маша - Это такие женщины что одеваются в розовое и целуют мужчин за деньги - опытно отвечает 7летняя Таня. И все им понятно. |
||||||||
|
|||||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |