![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| linuss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 20.10.2009 Репутация: нет Всего: нет |
Добр(ое,ый) утро, день, вечер. У меня вопрос думаю достаточно банальный, я начинаюший программист на C#. Пока работал в основном с XML, ADO.NET и писал некоторые классы в этом языке. Но есть желание изучать углубленно данный язык, теперь я остановился на таких понятиях как делегат(delegate) и интерфейс(interface).
А теперь вопросы. 1) Касается делегатов. Читал различные статьи в инете, но что то пока не могу понять смысл использования делегатов, т.е. для чего они вообще нужны, мог бы кто нибудь доходчиво, скажем на пальцах сказать для чего они именно нужны.?. 2) а второй вопрос касается именно интерфейсов, и в принципе суть вопроса такая же как и для первого вопроса. Буду признателен, если кто нибудь отзовется. Заранее благодарен. |
|||
|
||||
| fry |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: нет Всего: 3 |
Необходим для представления "полномочий" некоторой другой сущности. По сути это еще один способ обратиться к некоторому коду из другого кода. Если надо точнее см. в гугле.
Представляет единый способ работы с объектами. По большому счету, он необходим если у тебя есть некоторое множество объектов схожего назначения (имеющих один интерфейс) и некоторый код, который работает с ними исходя не из конкретного типа, а из назначения объекта (через этот интерфейс), при этом настоящий тип объектов ему не известен. Т.е. иными словами это способ убрать зависимость от конкретной реализации. Если надо точнее см. в гугле. Старался объяснить попроще, остальное, думаю, лучше сам прочитай. Это сообщение отредактировал(а) fry - 29.12.2009, 02:41 |
||||
|
|||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
1. можно проще. при помощи делегата можно передать один метод в другой метод, в качестве параметра. и соответственно использовать этот переданный метод. в общих чертах делегат это ссылка на метод. 2. при помощи интерфейсов можно реализовать наследование структуры класса, но не его реализацию. интерфейс в чем то похож на абстрактный класс, с той разницей что в абстрактном классе может быть реализация, а в интерфейсе только определения методов, и каждый класс наследующий интерфейс, должен реализовать все методы определенные в интерфейсе. для примера интерфейса можно рассмотреть электрическую розетку. к ней можно подключить любой прибор у которого такой же разъем(интерфейс) как и у розетки. и все приборы при этом будут получать электричество. другими словами при помощи интерфейса можно добиться совместимости разных реализаций похожих классов. к примеру, тебе в программе нужно сохранять историю работы программы, но ты не решил до конца где именно тебе надо их хранить(база, файл, что то еще). можно реализовать интерфейс в котором описать методы которые будет использовать программа для сохранения истории. а потом создавать разные классы, которые будут реализовывать этот интерфейс, и твоя программа сможет использовать любой из этих классов. ___ в общем как то так я все это понимаю. |
|||
|
||||
| NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
Я конечно понимаю, что проще спросить на форуме, но....
http://ru.wikipedia.org/wiki/Делегат_(программирование) http://ru.wikipedia.org/wiki/Интерфейс_(об...ограммирование) -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
| jorikdima |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 18.1.2008 Где: Там, где Зенит Репутация: нет Всего: нет |
по аналогии с плюсами
делегат - тип данных, являющийся указателем на функцию с какой-либо сигнатурой интерфейс - абстрактный класс с только чисто виртуальными функциями. |
|||
|
||||
| Bio |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.12.2006 Репутация: нет Всего: нет |
По поводу делегатов, даже луче вот это для понимания
http://ru.wikipedia.org/wiki/Callback_%28%...%D0%B8%D0%B5%29 |
|||
|
||||
| N1ko |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 30.12.2007 Где: Киев Репутация: нет Всего: нет |
По поводу интерефейсов у меня достаточно долго стоял тот же вопрос, пока я не набрёл на один пример, который чётко поясняет их суть. ИМХО на пример проще всего такие вещи разбирать. Собственно поделюсь им с Вами =) В банковой структуре любой страны есть основной банк(государственный - назовём его Г) и банки, которые ему соответственно подчиняются. Вот собственно этот банк Г рассказывает другим банкам, как вести всякого рода финансовые операции:перевод денег на счёт, оплата кредита и тд. То есть по сути он им только говорить что должно быть на входе и на выходе каждой операции. Допустим в случае перевода денег на счёт любой банк должен получит от физического или юридического лица деньги и номер счёта, куда отправить эти деньги. А банк в свою очередь предоставляет этому человеку чек о перечислении денег. То есть в данном случае банк пользуется интерфейсом, заданым Г банком для перечисления денег. На входе счёт и деньги, на выходе чек. И соответственно результат получается у каждого банка одним и тем же. И вот самая суть интерфейсов: каждый банк имея имея интерфейс перечисления денег, реализует его по разному. То есть первый банк делает такой перевод через webmoney, ещё какой нить банк єто делает посредством курьеров
|
|||
|
||||
| Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
Не плохо! Теперь так же про делегаты |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
||||
|
||||
| Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
||||
|
||||
| Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 3 Всего: 9 |
Не совсем корректно, но можно представить что делегат это карман преступника где он держит оружие (метод). У него возникает мысль убить кого-либо и он тянется в карман, а уж как он Вас убьет зависит от того какой метод предмет у него в кармане - пистолет, нож, кирпич.
зы подпись это наверное -что можно одной рукой взять. |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
N1ko, отличный пример про интерфейсы!
Действительно, хочется пример на делегаты, который явно показывает ситуацию, где без делегатов ну никак (или почти никак). Я видел много примеров, но какие-то они неубедительные. И в "C# 2008 и платформа .NET 3.5" тоже какие-то неубедительные примеры... Логику показанных там примеров можно и с if-ами сделать и вызывать нужный метод напрямую... То есть хочется пример, где через if-ы не сделаешь вызов нужного метода! Это сообщение отредактировал(а) ДобренькийПапаша - 5.1.2010, 16:35 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
Обработчики событий в WinForms. -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Ну с событиями всё понятно)))
А кроме?))) Или других случаев нет?))) (может быть массив функций иногда нужен?) -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Вот это здорово! Образно и понятно, прям за душу берёт Можно, попросить. чтоб если будет продолжение про делегаты то пусть там будет про гопников) Например
-------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |