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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Для чего нужны делегаты? 
:(
    Опции темы
linuss
Дата 29.12.2009, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 20.10.2009

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



Добр(ое,ый) утро, день, вечер. У меня вопрос думаю достаточно банальный, я начинаюший программист на C#. Пока работал в основном с XML, ADO.NET и писал некоторые классы в этом языке. Но есть желание изучать углубленно данный язык, теперь я остановился на таких понятиях как делегат(delegate) и интерфейс(interface).
А теперь вопросы.

1) Касается делегатов. Читал различные статьи в инете, но что то пока не могу понять смысл использования делегатов, т.е. для чего они вообще нужны, мог бы кто нибудь доходчиво, скажем на пальцах сказать для чего они именно нужны.?.

2) а второй вопрос касается именно интерфейсов, и в принципе суть вопроса такая же как и для первого вопроса.

Буду признателен, если кто нибудь отзовется.

Заранее благодарен.
PM MAIL   Вверх
fry
Дата 29.12.2009, 02:27 (ссылка)   | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

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



Цитата

делегат


Необходим для представления "полномочий" некоторой другой сущности. По сути это еще один способ обратиться к некоторому коду из другого кода. Если надо точнее см. в гугле.

Цитата

интерфейс


Представляет единый способ работы с объектами. По большому счету, он необходим если у тебя есть некоторое множество объектов схожего назначения (имеющих один интерфейс) и некоторый код, который работает с ними исходя не из конкретного типа, а из назначения объекта (через этот интерфейс), при этом настоящий тип объектов ему не известен. Т.е. иными словами это способ убрать зависимость от конкретной реализации. Если надо точнее см. в гугле.

Старался объяснить попроще, остальное, думаю, лучше сам прочитай.

Это сообщение отредактировал(а) fry - 29.12.2009, 02:41
PM MAIL   Вверх
Экскалупатор
Дата 29.12.2009, 04:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(fry @  29.12.2009,  01:27 Найти цитируемый пост)
Необходим для представления "полномочий" некоторой другой сущности.

 smile никогда бы не догадался что это про делегат...

1. можно проще. при помощи делегата можно передать один метод в другой метод, в качестве параметра. и соответственно использовать этот переданный метод. в общих чертах делегат это ссылка на метод.

2. при помощи интерфейсов можно реализовать наследование структуры класса, но не его реализацию. интерфейс в чем то похож на абстрактный класс, с той разницей что в абстрактном классе может быть реализация, а в интерфейсе только определения методов, и каждый класс наследующий интерфейс, должен реализовать все методы определенные в интерфейсе. для примера интерфейса можно рассмотреть электрическую розетку. к ней можно подключить любой прибор у которого такой же разъем(интерфейс) как и у розетки. и все приборы при этом будут получать электричество. другими словами при помощи интерфейса можно добиться совместимости разных реализаций похожих классов.
к примеру, тебе в программе нужно сохранять историю работы программы, но ты не решил до конца где именно тебе надо их хранить(база, файл, что то еще). можно реализовать интерфейс в котором описать методы которые будет использовать программа для сохранения истории. а потом создавать разные классы, которые будут реализовывать этот интерфейс, и твоя программа сможет использовать любой из этих классов.

___
в общем как то так я все это понимаю.
PM MAIL ICQ   Вверх
NightmareZ
Дата 29.12.2009, 05:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

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





--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
jorikdima
Дата 29.12.2009, 12:56 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 18.1.2008
Где: Там, где Зенит

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



по аналогии с плюсами

делегат - тип данных, являющийся указателем на функцию с какой-либо сигнатурой

интерфейс - абстрактный класс с только чисто виртуальными функциями.
PM MAIL   Вверх
Bio
Дата 30.12.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 18.12.2006

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



По поводу делегатов, даже луче вот это для понимания 
http://ru.wikipedia.org/wiki/Callback_%28%...%D0%B8%D0%B5%29
PM MAIL   Вверх
N1ko
Дата 4.1.2010, 23:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

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



По поводу интерефейсов у меня достаточно долго стоял тот же вопрос, пока я не набрёл на один пример, который чётко поясняет их суть. ИМХО на пример проще всего такие вещи разбирать. Собственно поделюсь им с Вами =) В банковой структуре любой страны есть основной банк(государственный - назовём его Г) и банки, которые ему соответственно подчиняются. Вот собственно этот банк Г рассказывает другим банкам, как вести всякого рода финансовые операции:перевод денег на счёт, оплата кредита и тд. То есть по сути он им только говорить что должно быть на входе и на выходе каждой операции. Допустим в случае перевода денег на счёт любой банк должен получит от физического или юридического лица деньги и номер счёта, куда отправить эти деньги. А банк в свою очередь предоставляет этому человеку чек о перечислении денег. То есть в данном случае банк пользуется интерфейсом, заданым Г банком для перечисления денег. На входе счёт и деньги, на выходе чек. И соответственно результат получается у каждого банка одним и тем же. И вот самая суть интерфейсов: каждый банк имея имея интерфейс перечисления денег, реализует его по разному. То есть первый банк делает такой перевод через webmoney, ещё какой нить банк єто делает посредством курьеровsmile, в третьем банке какая нить дряхлая бабушка берёт у тебя деньги, едет к непосредственому владельцу счёта и отдаёт ему деньги в руки а потом возращается и відаёт чек. smile  В общем у каждого свой способ, но Г банку главное что бы на выходе было именно то что ему нужно, а мелкие банки сами решают как им это делать. Точно так же и в интерфейсах. Интерфейс определяет обязательную структуру класса, а помимо этого ты можешь добавить ещё много всего в класс своего, что не оговорено в интерфейсе. Думаю оюъяснил доходчиво и понятно.
PM MAIL ICQ   Вверх
Dobermann
Дата 5.1.2010, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

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



Цитата(N1ko @  4.1.2010,  23:58 Найти цитируемый пост)
По поводу интерефейсов у меня достаточно долго стоял тот же вопрос, пока я не набрёл на один пример, который чётко поясняет их суть. ИМХО на пример проще всего такие вещи разбирать. Собственно поделюсь им с Вами =) В банковой структуре любой страны есть основной банк(государственный - назовём его Г) и банки, которые ему соответственно подчиняются. Вот собственно этот банк Г рассказывает другим банкам, как вести всякого рода финансовые операции:перевод денег на счёт, оплата кредита и тд. То есть по сути он им только говорить что должно быть на входе и на выходе каждой операции. Допустим в случае перевода денег на счёт любой банк должен получит от физического или юридического лица деньги и номер счёта, куда отправить эти деньги. А банк в свою очередь предоставляет этому человеку чек о перечислении денег. То есть в данном случае банк пользуется интерфейсом, заданым Г банком для перечисления денег. На входе счёт и деньги, на выходе чек. И соответственно результат получается у каждого банка одним и тем же. И вот самая суть интерфейсов: каждый банк имея имея интерфейс перечисления денег, реализует его по разному. То есть первый банк делает такой перевод через webmoney, ещё какой нить банк єто делает посредством курьеровsmile, в третьем банке какая нить дряхлая бабушка берёт у тебя деньги, едет к непосредственому владельцу счёта и отдаёт ему деньги в руки а потом возращается и відаёт чек. smile  В общем у каждого свой способ, но Г банку главное что бы на выходе было именно то что ему нужно, а мелкие банки сами решают как им это делать. Точно так же и в интерфейсах. Интерфейс определяет обязательную структуру класса, а помимо этого ты можешь добавить ещё много всего в класс своего, что не оговорено в интерфейсе. Думаю оюъяснил доходчиво и понятно. 

Не плохо! Теперь так же про делегаты smile 
PM   Вверх
Экскалупатор
Дата 5.1.2010, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(Dobermann @  4.1.2010,  23:55 Найти цитируемый пост)

Не плохо! Теперь так же про делегаты smile  

а свой вариант есть?
PM MAIL ICQ   Вверх
Dobermann
Дата 5.1.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

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



Цитата(Экскалупатор @  5.1.2010,  02:22 Найти цитируемый пост)
а свой вариант есть? 

эм...передача метода другому методу...не более =0
PM   Вверх
Heinzz
Дата 5.1.2010, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

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



Не совсем корректно, но можно представить что делегат это карман преступника где он держит оружие (метод). У него возникает мысль убить кого-либо и он тянется в карман, а уж как он Вас убьет зависит от того какой метод предмет у него в кармане - пистолет, нож, кирпич.
зы подпись это наверное -что можно одной рукой взять.


--------------------
user posted image
PM MAIL   Вверх
ДобренькийПапаша
Дата 5.1.2010, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



N1ko, отличный пример про интерфейсы!

Действительно, хочется пример на делегаты, который явно показывает ситуацию, где без делегатов ну никак (или почти никак). Я видел много примеров, но какие-то они неубедительные.

И в "C# 2008 и платформа .NET 3.5" тоже какие-то неубедительные примеры... Логику показанных там примеров можно и с if-ами сделать и вызывать нужный метод напрямую... То есть хочется пример, где через if-ы не сделаешь вызов нужного метода!

Это сообщение отредактировал(а) ДобренькийПапаша - 5.1.2010, 16:35


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
NightmareZ
Дата 5.1.2010, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

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



Цитата(ДобренькийПапаша @  5.1.2010,  16:34 Найти цитируемый пост)
То есть хочется пример, где через if-ы не сделаешь вызов нужного метода!

Обработчики событий в WinForms.


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
ДобренькийПапаша
Дата 5.1.2010, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Ну с событиями всё понятно)))

А кроме?)))
Или других случаев нет?))) (может быть массив функций иногда нужен?)


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
KuMa1104
Дата 5.1.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Цитата(Dobermann @  5.1.2010,  00:55 Найти цитируемый пост)
в третьем банке какая нить дряхлая бабушка берёт у тебя деньги, едет к непосредственому владельцу счёта и отдаёт ему деньги в руки а потом возращается и відаёт чек. 

Вот это здорово!
Образно и понятно, прям за душу берёт smile 

Можно, попросить. чтоб если будет продолжение про делегаты то пусть там  будет про гопников)

Например
Код

Гопник Серый, делегировал свою биту гопнику Дрону и т.д...




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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