Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2016, 23:27   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Вызов функции

Всем здрасте ...
Я так и не смог придумать адекватный текст заголовка, так как мой вопрос не вмещается в 3-5 слов.
Суть такова:
У меня есть семь функций, и массив bool[], содержащий семь значений, которые определяют, стоит ли вызывать каждую из семи функций.
Вопрос: можно ли это сделать циклически ?
Абстрактно:
Код:
for (byte i=0;i<7;i++)
	if (arr[i])
		Вызвать функцию, к которой привязан этот элемент массива
Я знаю только один способ вызвать функцию - напрямую, по её имени. Но, к моему сожалению этот способ не позволяет мне вызывать так несколько функций так, как бы мне этого хотелось.
Можно ли так сделать, и если да - то как ?
Понятно, что эти семь функций надо где то сохранить, но я даже не знаю, как написать запрос в гугле.
На запрос "c# ссылка на функцию" я нашёл, что это из области неуправляемого кода, и не кошерно мешать управляемый и неуправляемый код.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 19.11.2016 в 23:30.
OmegaBerkut вне форума Ответить с цитированием
Старый 19.11.2016, 23:34   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

delegate, Action, Func, ...
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.11.2016, 01:36   #3
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

зачем отвязывать функцию от массива? лист<keyvaluepair<<bool, #2>> или еще чего подходящего
come-on вне форума Ответить с цитированием
Старый 20.11.2016, 18:20   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

come-on, я не понял вашего вопроса ...
Как мне посоветовал Alex11223 - я создал массив, и обращаюсь к нему:
Код:
Func<string,string>[] functions=new Func<string,string>[7];
functions[0]=new Func<string,string>(MyFunc1); // и так далее по аналогии
// ...
output=functions[i].Invoke(input); // в цикле
При этом, в моём случае все мои функции выполняют изменение input таким образом, что на каждой итерации цикла в output сохраняется изменённая строка input. Но это уже другая история.

Сейчас у меня появился ещё один вопрос, по теме ссылок, только теперь не на функции, а на значения ...
В моём классе есть несколько значений. У каждого значения есть компонент интерфейса, отвечающий за содержимое отдельно взятого значения.
Дабы не городить 16 обработчиков событий на каждый компонент (ровно столько у меня компонентов, и их значений в классе) - я хочу организовать редактирование значения, которое я предварительно сохраняю в свойство Tag каждого компонента (при его создании). Вопрос такой: как в Tag сохранять ссылку на значение класса, для дальнейшего редактирования значения через эту ссылку ?
Абстрактно:
Код:
textBox1.Tag=example.assigntext; // это должно быть сохранение ссылки на значение
// ...
textBox1.Tag="Hello, world !"; // при этом example.assigntext должно измениться
На C++ так будет работать, если при записи значения перед example.assigntext поставить амперсанд (&) ... Так как это не передача параметра в функцию - ref не прокатит. Как это дело организовать на C# ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 20.11.2016, 18:29   #5
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

example.assigntext = "Hello, world !";
come-on вне форума Ответить с цитированием
Старый 20.11.2016, 19:03   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

come-on
У меня таких assigntext'ов 16 штук, ровно столько же и компонентов интерфейса для их редактирования. Так конечно сделать можно, но будет некрасиво - 16 обработчиков событий.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 20.11.2016, 19:28   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

sender это тот на ком вызвано событие
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.11.2016, 19:35   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Пепел Феникса
Та же яичница, только в профиль: 16 кейсов. UPD: поправочка - для самих сендеров кейс неприменим. Так что - (sender as TextBox).Name.
Хотелось бы, что бы интерфейсная реализация содержала один обработчик события для редактирования одного типа данных. При этом - код обработчика может содержать всего одну строку. Я знаю, что такое можно сделать на С++, спрашиваю про аналог на C#.
Для примера - код обработчика события интерфейсной реализации:
Код:
((sender as CheckBox).Tag as Control).Enabled=(sender as CheckBox).Checked;
Таким образом у каждого CheckBox на форме существует свой контрол, который нужно включать/выключать.
Но это экземпляры классов - с ними, в данном случае, проще.
Как быть с переменными ?
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 20.11.2016 в 21:10.
OmegaBerkut вне форума Ответить с цитированием
Старый 20.11.2016, 22:55   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас есть лямбды, у вас есть делегаты, вы можете создавать структуры/классы.
полет фантазии неограничен.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.11.2016, 00:28   #10
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
у вас есть лямбды, у вас есть делегаты, вы можете создавать структуры/классы.
полет фантазии неограничен.
Я много чего не знаю ... По C#, ровно как и по С++. И, есть те вещи, которые я знаю, как делаются в C++, но не знаю, как делаются в C#; ровно как и наоборот.
Так вот ...
Что такое лямбды - я не знаю (не приходилось ещё сталкиваться) ...
Что такое делегаты - я имею представление ... Если говорить аналогиями - это зародыши генериков. Но опять же - сталкиваться непосредственно с делегатами приходилось только при обращении к компоненту из потока.
К чему я веду всю эту ересь ...
Я задал вполне корректный и конкретный вопрос - как сделать это, привёл аналогию из родственного языка, написал псевдо-код того, что я хочу получить.
А в ответе получаю словосочетания без инструкций к их применению. Ну, или то, что другие люди называют "философией программирования" - в моём маленьком круге студентов-программистов под этим выражением подразумевается несуразная ересь. Или необоснованные, ни с чем не связанные данные.
Как вы лично, Пепел Феникса, предлагаете мне на такое реагировать ?

Говоря проще - внятного ответа на свой (второй) вопрос я так и не получил.
P. S. Я понимаю, что мне тут никто ничего не должен; но - если отвечаете, то отвечайте, пожалуйста, по существу.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 21.11.2016 в 00:40.
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции Diana528 Общие вопросы C/C++ 1 18.04.2013 21:56
вызов функции -Anton- Microsoft Office Excel 2 09.06.2011 14:18
Мини бэйсик:объявление функции, вызов функции , возврат. AL_LORD Помощь студентам 2 14.10.2010 17:48
Вызов функции new player БД в Delphi 5 07.10.2010 13:01
Вызов функции MarSeON PHP 2 01.08.2008 20:22