|
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 14
|
|
Свойства, интерфейсы, сигнатуры, делегаты. Просто о сложном19.11.2013, 14:42. Показов 3173. Ответов 16
Метки нет (Все метки)
Начал изучать C#. Лет мне много с ООП - туго. Решил изучать азбуку по детсадовскому методу.
Итак. Есть план дачного кооператива ( класс). По этому плану строителем (конструктором) построено три объекта собственности - три дачных участка. В первом есть поля с луком и огурцами, метод вспашки -лопата Во втором есть поля с картошкой и капустой , метод вспашки - лошадка На третьем есть поля с маком и коноплей, метод вспашки - трактор -"Беларусь" Вчера произошло событие - над участками пролетел самолет и обработал от вредителей. Сейчас мне надо найти аналогии: свойство интерфейс сигнатура делегат Помогите пожалуйста!
0
|
|
| 19.11.2013, 14:42 | |
|
Ответы с готовыми решениями:
16
Объяснить такие понятия как делегаты, сигнатуры, интерфейсы, ковариантность, контравариантность
Делегаты, интерфейсы и коллекции |
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 19.11.2013, 15:37 | |
|
0) метод - некоторое действие, которое может выполнять объект.
1) свойство(Property) - упрощенная форма записи метода, который определяет получение какого-нибудь значения, или запись + внешне он выглядит как обычное поле. например, у каждого участка указана урожайность на квадратный метр, размер участка. свойство "урожай" может внутри себя вычислить сколько именно было собрано и вернуть результат. или наоборот, нам известен урожай на участке, надо узнать его урожайность. создаем свойство УрожайностьПоУрожаю и простым присваиванием получаем значение поля урожайности для данного участка(при этом вычисления скрыты внутри свойства). 2) Интерфейс - описание методов и свойств. то есть такой вот шаблон для шаблона класса. пример: есть интерфейс ОбслуживаниеОбъекта - в него входят ОбходПатруляОхраны, ОбрезкаДеревьев. потом создаем класс для дачного участка и совсем "левый" класс для коттеджа нового русского. если в них осуществить реализацию интерфейса ОбслуживаниеОбъекта, то мы будем сразу знать что в них есть методы ОбходПатруляОхраны и ОбрезкаДеревьев даже ничего не зная о самих классах участка и коттеджа. 3) Сигнатура - краткое описание функции(возвращаемый тип, имя функции, порядок, тип параметров (параметры char, int не то же самое что int, char). 4) Делегат - указатель на функцию.
1
|
|
|
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 14
|
|
| 19.11.2013, 15:54 [ТС] | |
|
Спасибо!
Можно продолжить: перегрузка - план участков дополненный планом дороги, электричества, водопровода
0
|
|
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
||||||
| 19.11.2013, 16:17 | ||||||
|
мы создали общий класс и указали в нем виртуальный метод ОбработкаУчастка.
после этого создаем класс-наследник, ДачныйУчасток и в нем создаем перегруженный метод ОбработкаУчастка - выполняется обработка лопатой. и создаем класс-наследник Кооператив, и в нем создаем перегруженный метод ОбработкаУчастка - выпоняется работа трактором а отдельные планы дорог, электро и водопроводных сетей лучше вынести в интерфейсы.
1
|
||||||
|
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 14
|
||||||
| 19.11.2013, 20:30 [ТС] | ||||||
|
ОК. спасибо. Поле от свойства уже отличаю.
Немного более сложный для меня пример, пытаюсь его откомментировать, но не получается, чем больше читаю msdn, тем больше тону. Хотя в нете надергал фрагментов кода и написал работающее приложение. Все-таки хочу понять. Слишком глубоко во мне сидит процедурное программирование.
0
|
||||||
|
foo();
|
|||||||
| 19.11.2013, 23:41 | |||||||
|
Каждый контрол на форме - это объект класса, исходный код которого нам не виден. Зато видны открытые свойства, методы и события этих объектов. sender - объект если я помог и Вам понятно - пишите, будем дальше разбираться
1
|
|||||||
|
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 14
|
|||||||||||
| 20.11.2013, 08:50 [ТС] | |||||||||||
|
rattrapper, спасибо.
Кажется понял, что такое
Теперь мне надо прочитать своими словами строчку
0
|
|||||||||||
|
60 / 59 / 15
Регистрация: 04.05.2010
Сообщений: 161
|
|
| 20.11.2013, 09:42 | |
|
я конечно могу ошибаться, но идея такая:
у Control'а есть событие MouseMove, и мы с помощью оператора += подписываемся на это событие. Для этого создаем новый делегат типа MouseEventHandler. ctrl_MouseMove - это метод, у которого параметры такого же типа как и у события MouseMove. То есть при вызове события ctrl.MouseMove, программа выполнит наш код в методе ctrl_MouseMove.
1
|
|
|
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 14
|
|
| 21.11.2013, 09:10 [ТС] | |
|
Вылезла ещё одна непонятка - какая разница между делегатом и интерфейсом.
Как я понял: делегат это телеграмма: "Бабушка приехала". А интерфейс - та же телеграмма с приказом: копай огород. чем копать твое дело - хоть конем, хоть лопатой, хоть трактором. Если я не прав, поправьте, пожалуйста.
0
|
|
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 21.11.2013, 12:40 | |
|
Muraw, интерфейс говорит: у этого класса есть такие-то и такие-то определенные методы.
а делегат - хранит метод. а чей это метод - ему без разницы. например, есть идентичные методы(по параметрам и возвращаемому значению) перекопать огород у объекта-трактора и рабочего. мы можем сохранить метод как рабочего так и трактора. и выполнив делегат мы "заставим" выполнить это действие объект, при этом даже не зная толком кто его сделал и как.(то есть как бы говорим по рации: "перекопай огород!" - а кто услышит эту команду - работник или тракторист мы не знаем. рация - это делегат. и кто на другой стороне рации зависит от того какой метод хранит делегат) Добавлено через 5 минут подробнее с интерфейсом - это как бы описание. ты работаешь в отделе кадров и у тебя большая папка сотрудников. есть у нас интерфейсы: программист, уборщица, водитель. - ты ничего не знаешь о том, кто эти содтрудники, но ты знаешь, что программист умеет писать код, уборщица может сделать уборку, а водитель может выполнить грузоперевозку.
1
|
|
|
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 14
|
|
| 21.11.2013, 13:58 [ТС] | |
|
Learx, спасибо. Прояснил. А теперь мне не очень понятен букварь.
Читаю у Шилдта Событие Click определяется в классе Button. (Событие Click унаследовано от класса Control.) Его общий формат таков: public Event EventHandler Click; Так и не понял, что такое public Event EventHandler Click; В приведенном ниже примере такой строчки не увидел.
0
|
|
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
||||||||||||||||
| 21.11.2013, 14:12 | ||||||||||||||||
|
Event - событие, контейнер делегатов.
EventHandler - делегат, описанный в библиотеке Click - имя события. эта строчка находится внутри библиотеки фреймворка в классе Control. Добавлено через 8 минут как используется(код автоматически генерируется студией при двойном щелчке по кнопке на контрукторе формы)
так выглядит описание делегата(обратите внимание что возвращаемый тип и тип переменных метода соответствует делегату):
1
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 14
|
||||||
| 21.11.2013, 14:31 [ТС] | ||||||
|
Learx, если можно ещё вопрос:
Читаю Рассмотрим внимательно код обработчика события щелчка на кнопке:
0
|
||||||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 21.11.2013, 15:05 | |
|
имена параметров и методов роли не играют. вы можете использовать любое имя. важна лишь сигнатура метода(возвращаемый тип данных, типы параметров, важно количество и порядок параметров)
1
|
|
|
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 14
|
|
| 22.11.2013, 08:46 [ТС] | |
|
Learx, спасибо. А то я всё пытаюсь понять где и как эти имена рождаются.
0
|
|
|
|
|||||||||||||||||||||||||||||||||
| 22.11.2013, 09:14 | |||||||||||||||||||||||||||||||||
|
Я когда-то тоже не понимал, что за "е", что за делегаты, что вообще за события, как они вызываются вообще. Вот приложение написал, в котором наглядно это показано, думаю сразу поймёшь, что за
Создай консольное приложение, скопируй туда это всё, запусти и пройдись по коду пошагово в отладке, и всё станет ясно. Добавлено через 48 секунд Когда создавать проект будешь, сразу назови его: ConsApp_Events, чтобы не было лишнего гемора с нэймспэйсом Добавлено через 5 минут
1
|
|||||||||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 14
|
|
| 22.11.2013, 13:23 [ТС] | |
|
Как все-таки много зависит от стиля изложения! Читаю Шилдта , вроде всё элементарно, но ничего не понятно. Взял Троелсена - идет на ура!
0
|
|
| 22.11.2013, 13:23 | |
|
Помогаю со студенческими работами здесь
17
Интерфейсы и делегаты. Каков функционал IEnumerable в приведенном коде Нужна идея задачи, где можно было бы использовать делегаты и интерфейсы Интерфейсы, просто подскажите с чего начать Интерфейсы. Выделить у классов общий интерфейс(или интерфейсы) Сортировка в сложном List Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|