| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > C# | Delegates |
| Автор: VOX 30.11.2009, 12:33 |
| Здравствуйте дорогие участники конференции! У меня возник вопрос по языку C#. Вопрос касается такой возможности как делегаты. Я умею с помощью этого инструмента ссылкаться на ф-ии, но как я помню, делегаты являются неким подобием указателей из с++, с помощью указателей можно было ссылаться на переменные, т.е. взять адрес переменной из памяти, можно ли выполнить подобное на С#. Спасибо! |
| Автор: tol05 30.11.2009, 12:44 | ||
да, можно. Делегаты - это стандартный тип данных в CLR (на равне с классами, структурами, интерфейсами...). Можно объявить тип делегата и использовать этот тип как и любой другой параметр метода
http://www.rsdn.ru/article/dotnet/delegat.xml |
| Автор: Skynin 30.11.2009, 12:51 | ||||||
В C# нет функций. Хотя их можно эмулировать с помощью статических методов.
Да, некое подобие с "указателем на функцию" есть. Но делегат умеет хранить больше одного "указателя", и хранит еще и ссылку на объект, у которого нужно вызывать метод.
В C# нет адресной арифметики. Переменные делятся на 2 вида - "значения" и "ссылочные". Для первых есть частные случаи получения адреса, например при передаче в метод по ссылке (модификаторы ref и out). Ссылочные переменные и так - ссылки. Есть возможность создания неуправляемых секций кода, но нужно это крайне редко. Совет - забудьте на время аналогии с С++, и изучайте С# как свой первый язык программирования в жизни. Аналогии с С++ только запутают, это весьма разные языки, только на вид похожие.(ну и потому что императивные и объектно-ориентированные) |
| Автор: VOX 30.11.2009, 12:55 | ||
| Я всё понял, спасибо! +++ Добавлено через 3 минуты и 49 секунд хотя вот хотел бы уточнить...
каким образом можно вывести через делегат на консоль значение переменной integer? |
| Автор: VOX 30.11.2009, 14:16 | ||
| да думал нюанс какой-ть есть интересный! Спасибо! Но вот по этой ссылкеhttp://forum.vingrad.ru/forum/topic-281990/anchor-entry2033726/0.html на топик этого же форума, нашел у парня в коде:
т.е. я могу в коде сишарп использовать указатели??? |
| Автор: Exai1e 30.11.2009, 14:23 |
| VOX, unsafe это не безопасный код, можно но не желательно http://msdn.microsoft.com/ru-ru/library/chfa2zb8.aspx |
| Автор: Skynin 30.11.2009, 14:28 | ||
"Есть возможность создания неуправляемых секций кода, но нужно это крайне редко." Изучайте C#, а не С++! |
| Автор: Экскалупатор 30.11.2009, 14:32 | ||
VOX, а для чего? нет, я понимаю для чего они нужны в C/C++, но для чего они вам? |
| Автор: ДобренькийПапаша 30.11.2009, 14:48 | ||||
Почему нет? В смысле есть только методы? Если так, то поясните, пожалуйста, какая разница между функцией и методом в контексте платформы .NET. Ибо я много в какой литературе встречал мнение, что эти понятия идентичны. Их иногда различают, но крайне редко. |
| Автор: mrbrooks 30.11.2009, 14:52 | ||
можно, но как правило, не нужно. up
это побочный результат перехода с С++ на С#. |
| Автор: VOX 30.11.2009, 15:08 |
| да, это так сказать аклиматизация ))) но гражданство всё же будет двойным ))) Всем спасибо за ответы! |
| Автор: Skynin 30.11.2009, 15:26 | ||||
1. В метод неявно передается ссылка на объект. 2. Выбор метода может осуществляться во время выполнения (virtual), а не компиляции.
Их различают весьма часто, чтобы подчеркнуть различие между структурным и объектно-ориентированным программированием. Вы какую-то не такую литературу читаете Есть в инете: Х. Дейтел - C# в подлиннике. Наиболее полное руководство (классического типа учебник, до занудства. По уровню вопросов - рекомендую начинать с него) Эндрю Троелсен Язык программирования С# 2008 и платформа .NET 3.5 (для начинающего вполне сойдет и ранняя версия по С# 2005 .NET 2.0) (рассказано не только о самом языке программирования, но и о структуре самой CLR .NET и об основных классах и семействах стандартной библиотеки) Если прочтете хотя бы по диагонали, то многие, в том числе и эти, вопросы отпадут. |
| Автор: KelTron 30.11.2009, 15:56 | ||
Значит static метод всё же функция...всегда забавляли эти названия - функции, функции члены, методы..) |
| Автор: ДобренькийПапаша 30.11.2009, 16:42 |
| Я читал Троелсена и много чего читал, и считаю, что методы и функции одно и тоже. Те кто хотят видеть отличия должны всегда указывать это явно. В общем случае это одно и тоже. IMHO. (Если так Дейтел считает, то пусть считает и дальше, я не против |
| Автор: Skynin 30.11.2009, 16:53 | ||||||
Да, все есть CALL
3. Метод может изменить состояние объекта, ссылка на который неявно передана. 4. Внутри метода действуют правила доступности для полей объекта. А то что Вы считаете - дело такое. "Я знаю что такое секс, я читала" Новодворская Многие считают что знают С++, при этом используя его как Си с классами. И что с того? Контрольный вопрос на котором студенты на собеседовании спотыкаются: А есть ли отличия ссылок и указателей в С++, или это просто слова разные - и все 4ре года просиживания в ВУЗе сразу видны. Так и с делегатами - "указателями на функции". Не понял что такое делегаты и на тебе утечки памяти.
Как раз в общем случае и разное - см. мои 4ре пункта. А вот частный случай: метод с модификатором static - функция. Вобщем от неграмотности Ваши выводы и непонимание различий. Хотите научиться - научитесь. Хотите бравировать неграмотным пониманием - так и не будете понимать. |
| Автор: ДобренькийПапаша 30.11.2009, 18:52 |
| Различия между указателями и ссылками понятны, конечно. Я понял какую разницу вы подразумеваете под методом и функцией. Но тем не менее, ну не знаю, соглашусь всё-таки наверно, что различать эти понятия имеет смысл p.s. Я как-то не заострял внимание на этом различии, здесь дело терминологии. Может ли это на что-то серьёзно повлиять? Не заостряя внимания на этом различии, всё что до этого читал и прошу заметить делал, всё было понятно))) |
| Автор: Skynin 30.11.2009, 21:13 | ||||||||
А ссылка не частный ли случай указателя? И почему же - конечно? Из моего опыта собеседований - очень даже многие - не понимают.
Терминология рождается из понимания различий, а не - придумал профессор словечко. Если не понимаешь различий - то действительно, какая разница между потенциальной и кинетической энергией? А между "энергией" понимаемой физиком и "энергией" понимаемой экстрасенсом - уверены что нет разницы? Или - между "заражением крови" и "сепсисом"? Поэтому подумайте - почему специалисты прибегают к терминологии, а неспециалисты вполне обходятся бытовой речью. (тоже кстати - а что за термин - бытовая?)
На карьеру - собеседование без понимания терминологии не пройдете. На осознанное применение возможностей языка программирования - гадкий код будет вполне оценен как гадкий, со всеми вытекающими последствиями, хотя программа - работает.
Ну тогда вместо разъяснений, в которых Вы явно не нуждаетесь, исходя из "все было понятно" (мне и сейчас многое непонятно, прямо завидую) - А кто такие проститутки? - спрашивает 5летняя Маша - Это такие женщины что одеваются в розовое и целуют мужчин за деньги - опытно отвечает 7летняя Таня. И все им понятно. |