:: Не фоксом единым
Делегаты, а они есть?
Chips

Сообщений: 93
Дата регистрации: 11.02.2016
Добрый день.
А есть в FoxPro что-то вроде C# - ских делегатов ?
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Chips
А есть в FoxPro что-то вроде C# - ских делегатов ?
А работающие с фоксом просто обязаны знать про "C# - ских делегатов"? Странно только почему по этой же логике работающие с C# не знают возможностей фокса...
Что именно надо?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
Chips

Сообщений: 93
Дата регистрации: 11.02.2016
ssa
А работающие с фоксом просто обязаны знать про "C# - ских делегатов"?
Не обязаны, потому и тема создана в разделе "Не фоксом единым".

ssa
Что именно надо?
Надо узнать, а есть в FoxPro что-то вроде C# - ских делегатов.

Ну вот например, в C# есть аксессоры, в FoxPro это _ACCESS и _ASSIGN.

Ну хочется тоже самое только с делегатами.
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
C# свойства лишь схожи с фоксовыми access/assign методами, но далеко не идентичны им.

Делегатов в фоксе нет, то что есть ещё более отдалённо "похоже" на этот самый "типизированный указатель на метод" (даже более простого си-подобного "указателя на функцию" в фоксе нет). Где-то можно использовать банальный макро, где-то использовать BINDEVENT() - кстати, в его описании фигурирует слово delegate, правда оно закавычено, т.е. это "ну типа делегат"

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

"Хотеться" должно решить задачу/закодировать логику определённым образом, а не тупо "делегата как в шарпе". Вот если будет озвучена задача, которую ты пытаешься при помощи делегата решить, тогда и можно будет подбирать наиболее подходящий аналог.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Chips
ssa
А работающие с фоксом просто обязаны знать про "C# - ских делегатов"?
Не обязаны, потому и тема создана в разделе "Не фоксом единым".
Ответ на незаданный вопрос. КАКОЙ функционал у ваших "C# - ских делегатов" ищется в фоксе? Или вы считаете, что слово делегаты одинаково понимается и имеется во всех языках?
Цитата:

ssa
Что именно надо?
Надо узнать, а есть в FoxPro что-то вроде C# - ских делегатов.

Ну вот например, в C# есть аксессоры, в FoxPro это _ACCESS и _ASSIGN.

Ну хочется тоже самое только с делегатами.
Вот и напишите ЧТО делают делегаты в C# дабы знающие фокс могли написать вам какими средствами сие реализуется в фоксе.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
Chips

Сообщений: 93
Дата регистрации: 11.02.2016
ssa
Или вы считаете, что слово делегаты одинаково понимается и имеется во всех языках?

Нет, конечно я так не считаю, но всегда есть самое распространённое понятие.

Igor Korolyov
C# свойства лишь схожи с фоксовыми access/assign методами, но далеко не идентичны им.

Ну понятное дело, я просто пытаюсь найти замену. На замену Get и Set отлично подходят access/assign.

ssa
Вот и напишите ЧТО делают делегаты в C#
Герберт Шилдт - C# 4.0. Полное руководство - 2011 страница 473.

Igor Korolyov
наиболее подходящий аналог
Ну ладно, я тут немного туплю с "Обработчиками событий", никак не могу для себя решить как правильно всё это делать.

Извините за не очень удобочитаемый (программный) текст, но я хочу увидеть общее решение.

Вот есть приложение.
Форма с ТексБоксом в который пользователь вносит текст, по нажатию кнопки нужно сохранить этот текст в файл по указанному пользователем пути.

Делаем классы.

Делаем Класс ы.

Класс Папка
Метод Создать

Класс ТекстовыйФайл
Метод Создать
Метод Открыть
Метод ЗаписатьСтроку
Метод Сохранить
Метод Удалить
Метод Закрыть

Класс Настройки
Свойство ПутьУказанныйПользователем

Класс СамоПроверка
Метод ПроверитьСуществованиеПапки
Метод ПроверитьСуществованиеФайла
Метод ПроверитьУказанПутьИлиНет

Обработчик события «Клик» объект «Кнопка»
Если ПроверитьУказанПутьИлиНет = Ложь
Return

Если ПроверитьСуществованиеПапки = Ложь
Папка.Создать(ПутьУказанныйПользователем)

Если ПроверитьСуществованиеФайла = Истина
ТекстовыйФайл.Удалить(Настройки.ПутьУказанныйПользователем)
ТекстовыйФайл.Создать(Настройки.ПутьУказанныйПользователем)
ТекстовыйФайл.Открыть(Настройки.ПутьУказанныйПользователем)
ТекстовыйФайл.ЗаписатьСтроку
ТекстовыйФайл.Сохранить(Настройки.ПутьУказанныйПользователем)
ТекстовыйФайл.Закрыть
Иначе
ТекстовыйФайл.Создать(Настройки.ПутьУказанныйПользователем)
ТекстовыйФайл.Открыть(Настройки.ПутьУказанныйПользователем)
ТекстовыйФайл.ЗаписатьСтроку
ТекстовыйФайл.Сохранить(Настройки.ПутьУказанныйПользователем)
ТекстовыйФайл.Закрыть

**********************************************************************************
P.S.
Может лучше кодом сделать? (Я могу! =))


Собственно вопрос заключается в обработчике событий.
Можно ли его сделать как отдельный класс или это всегда будет метод?
Не могу понять как правильно делаются "Обработчики событий"
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Chips
ssa
Или вы считаете, что слово делегаты одинаково понимается и имеется во всех языках?

Нет, конечно я так не считаю, но всегда есть самое распространённое понятие.
Ошибаетесь, не всегда. Иногда его вообще нет.
Цитата:

ssa
Вот и напишите ЧТО делают делегаты в C#
Герберт Шилдт - C# 4.0. Полное руководство - 2011 страница 473.
Вот это сверхнаглость. Предлагаете нам искать сие творение и его изучать только лишь для помощи вам? Рыло не треснет?
Цитата:
Собственно вопрос заключается в обработчике событий.
Можно ли его сделать как отдельный класс или это всегда будет метод?
Не могу понять как правильно делаются "Обработчики событий"
Написанием методов для обработки событий.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Chips

Собственно вопрос заключается в обработчике событий.
Можно ли его сделать как отдельный класс или это всегда будет метод?
Не могу понять как правильно делаются "Обработчики событий"

В фоксе событие всегда ассоциировано с одноименным методом, те (в примитивном случае) у кнопки в событии Click пишешь код (= messagebox('Hello word')) - этот код будет выполнен при нажатии на кнопку, так же он будет выполнен при вызове Кнопка.Click()


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
Chips

Сообщений: 93
Дата регистрации: 11.02.2016
ssa
ssa
Вот и напишите ЧТО делают делегаты в C#

Герберт Шилдт - C# 4.0. Полное руководство - 2011 страница 473.

Вот это сверхнаглость. Предлагаете нам искать сие творение и его изучать только лишь для помощи вам? Рыло не треснет?

Объяснить лучше чем Герберт Шилдт я не смогу. Выкладывать страницы про делегаты из книги как-то глупо.
Если не хотите не изучайте, но я изучаю и создавая эту тему я рассчитывал на людей которые тоже это изучают.

PaulWist
В фоксе событие всегда ассоциировано с одноименным методом
Вот сейчас я делают так:
На событие "клин" какой нибудь кнопки у меня вызывается процедура которая уже вызывает необходимые процедуры и функции.
Или правильно будет эти процедуры и функции написать в самом методе "клик" избегая дополнительной упаковки в процедуру?
А вообще я думал создать Класс для этих процедур, то есть упаковывать их не в процедуру, а в класс, только вот не знаю насколько это будет правильно.
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Chips
ssa
ssa
Вот и напишите ЧТО делают делегаты в C#

Герберт Шилдт - C# 4.0. Полное руководство - 2011 страница 473.

Вот это сверхнаглость. Предлагаете нам искать сие творение и его изучать только лишь для помощи вам? Рыло не треснет?

Объяснить лучше чем Герберт Шилдт я не смогу.
И не надо.
Цитата:
Выкладывать страницы про делегаты из книги как-то глупо.
Не глупее, чем задавать вопрос про наличие в фоксе чего-то, что есть в хрен знает каком языке.
Цитата:
Если не хотите не изучайте,
Спасибо за указание, но что мне делать я давно решаю сам.
Цитата:
но я изучаю и создавая эту тему я рассчитывал на людей которые тоже это изучают.
И с какого перепуга вы на это рассчитывали?
Цитата:

PaulWist
В фоксе событие всегда ассоциировано с одноименным методом
Вот сейчас я делают так:
На событие "клин" какой нибудь кнопки у меня вызывается процедура которая уже вызывает необходимые процедуры и функции.
Вполне нормальное решение.
Цитата:
Или правильно будет эти процедуры и функции написать в самом методе "клик" избегая дополнительной упаковки в процедуру?
Можно и так.
Цитата:
А вообще я думал создать Класс для этих процедур, то есть упаковывать их не в процедуру, а в класс, только вот не знаю насколько это будет правильно.
Вы сначала критерии оценки правильности сформулируйте.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: Делегаты, а они есть?
Chips

Сообщений: 93
Дата регистрации: 11.02.2016
ssa
Chips
ssa
ssa
Вот и напишите ЧТО делают делегаты в C#

Герберт Шилдт - C# 4.0. Полное руководство - 2011 страница 473.

Вот это сверхнаглость. Предлагаете нам искать сие творение и его изучать только лишь для помощи вам? Рыло не треснет?


Объяснить лучше чем Герберт Шилдт я не смогу.

И не надо.

Как же не надо, если вы просите объяснений.
ssa
Вот и напишите ЧТО делают делегаты в C#

ssa
хрен знает каком языке
C# не хрен знает какой, а вполне набирающий обороты современный язык.

ssa
Спасибо за указание, но что мне делать я давно решаю сам.
Ну и чудненько.

ssa
но я изучаю и создавая эту тему я рассчитывал на людей которые тоже это изучают.
И с какого перепуга вы на это рассчитывали?

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

В связи с выше сказанным, я и рассчитывал, что на форме посвященному программированию на FoxPro может найтись человек или группа людей заинтересованных в изучении другого языка программирования, например C#.

Повторяюсь, тема была создана в разделе "Не фоксом единым".
Подобный раздел так же предполагает наличие людей разбирающихся не только в FoxPro на форму FoxPro.

ssa
Вполне нормальное решение.
ssa
Можно и так.
Можно по разному, главное выяснить как делать правильно. Выдумывать разнообразные варианты исполнения одного и того же замысла можно очень долго и выдумать их в этом процессе очень много.
Но я уверен, что я не единственный кто задавал когда либо подобным вопросом и люди намного умней меня уже давно нашли относительно оптимальный путь для решения типовых задач связанных с созданием "Обработчиков событий". Вот я и решил спросить у опытных людей как сделать правильно, ибо мои изыскания по данному вопросу затянулись и начали порождать новые вопросы, что еще больше меня путает.
Мне нежен совет или ссылка на литературу.
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Chips
Вот сейчас я делают так:
На событие "клин" какой нибудь кнопки у меня вызывается процедура которая уже вызывает необходимые процедуры и функции.
Или правильно будет эти процедуры и функции написать в самом методе "клик" избегая дополнительной упаковки в процедуру?
А вообще я думал создать Класс для этих процедур, то есть упаковывать их не в процедуру, а в класс, только вот не знаю насколько это будет правильно.

1. "Классика" говорит, что для "общей функциональности" необходимо написать класс (например, кнопки для открытия/закрытия файла), а затем этот класс субклассировать для открытия/закрытия txt, dbf, pdf итд, те код будет лежать в событии/методе самого класса (обычно в классе добавляют пользовательский метод, что бы код реакции был "один", а вызов мог быть из нескольких мест, например Кнопка.Click, Кнопка.KeyPress итд), те класс будет самодостаточным и изолированным от других объектов.

2. Для объектов контейнеров обычно код прописывают в пользовательских методах контейнера верхнего уровня.

3. Для "общих" задач (как открытие-закрытие файла, установление соединения с сервером итп) обычно используется класс-посредник (в нём пишется код, а затем из кнопки вызывается пользовательский метод класса-посредника), ... правда в отладке не очень удобно, приходится этот посредник выгружать-инициировать, вот в этом случае можно использовать подход когда из посредника вызываются prg (процедуры-функции), НО повторю, только для отладки.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/1 positive
Re: Делегаты, а они есть?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Chips
Ну понятное дело, я просто пытаюсь найти замену. На замену Get и Set отлично подходят access/assign.
Если внимательно следить за имеющимися у них "ограничениями и особенностями", то да, это "аналог".
Chips
Ну ладно, я тут немного туплю с "Обработчиками событий", никак не могу для себя решить как правильно всё это делать.
Обработчики событий "встроены" в фоксовые классы. То же "нажатие на экранную кнопку", т.е. событие Click ВСЕГДА имеет жёстко связанный с ним обработчик события - который является методом этого же класса с точно таким же именем. И большая часть кода имеющего дело с "событиями" в фоксе реализуется ИМЕННО через написание кода в данном методе-обработчике. Непосредственно, без позднего связывания. Никакие делегаты при этом не требуются вообще. Просто в фоксе иная парадигма "событий и обработчиков" нежели в C#.

Да, в какой-то период времени (не изначально - в 7 или даже 8 версии, если я не ошибаюсь) в фокс добавили возможность "динамически" связывать некоторый метод с некоторым событием (для чего и служит делегат в C#). Заодно и добавили функцию которая "вызывает срабатывание события". Что позволяет в некоторой степени эмулировать подход C# - т.е. писать отдельные методы, а потом явно их "связывать" с определёнными событиями, ну а заодно и создавать свои собственные события (что до этой версии фокса было в принципе невозможно сделать в рамках встроенного языка фокса).
Только для решения прикладных задач в 99% случаев это вообще не требуется. Для более-менее "грамотного" рисования формы по указанному сценарию достаточно всего ничего - создать в форме метод реализующий "логику" и в методе-обработчике Click соответствующей кнопки прописать его вызов. Всё. Если "логика" уже написана в каком-то классе, то помещаем на форму экземпляр этого класса (если он визуальный - визуально "бросаем", если невизуальный - создаём свойство для хранения ссылки и потом в коде через CreateObject создаём экземпляр и помещаем ссылку на него в свойство).

Не, оно, конечно, можно при помощи BINDEVENTS() напрямую привязать соответствующий метод к событию Click нужной кнопки (или ещё к какому другому событию) - только практической пользы в этом лично я не вижу. "Динамика" нужна весьма нечасто. В том же шарпе в варианте приложений для десктопа, как правило все эти "связки метода с событием" прописаны совершенно статично, и вообще в генерируемом коде (том, который создаёт визуальный редактор форм в VisualStudio) - т.е. это там как раз стараются "скрыть сложность" всех этих делегатов/event-ов и предоставить программисту простой способ решения задачи - тюкнул по имени события в окошке свойств для нужного элемента - вбил в появившемся методе-заготовке нужный код.
Chips
Собственно вопрос заключается в обработчике событий.
Можно ли его сделать как отдельный класс или это всегда будет метод?
Не могу понять как правильно делаются "Обработчики событий"
Обработчик события не может быть классом - ни в фоксе, ни в шарпе. Это всегда метод.
Код в шарпе всегда находится внутри того или иного метода - у него просто нет других конструкций для выражения "действий" кроме методов. В фоксе ещё исторически есть "процедуры и функции" - но их по сути можно рассматривать как статические методы "безымянного" объекта. Т.е. то что в шарпе можно записать как res = SomeClass.MyStaticMethod(param1); в фоксе запишется как res = MyFunction(param1)
При том если писать в шарпе код в том же самом классе SomeClass, то префикс - имя класса - вполне можно и не прописывать, и синтаксис получится вообще идентичным.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Делегаты, а они есть?
Chips

Сообщений: 93
Дата регистрации: 11.02.2016
Большое спасибо всем за ответы.
В ходе беседы я усвоил несколько важных вещей, вопросы конечно остались, но это уже для другой темы.
Ratings: 0 negative/0 positive
Re: Делегаты, а они есть?
lulgu
Автор

Сообщений: 1838
Дата регистрации: 30.11.2016
Трудно понять, что здесь можно понять.

Все же - что это за "делегаты", и можно ли их создать в фоксе?
Ratings: 1 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 3 (Гостей: 3)

© 2000-2024 Fox Club 
Яндекс.Метрика