Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676

Реализация массива функций

09.10.2020, 09:48. Показов 2195. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю класс, в конструктор которого хочу передавать список функций, которые исполняют определенные задачи. В моём случае это например разные методы обработки изображения.
C#
1
2
3
4
5
6
7
8
9
10
        public class FilterManipulations
        {
            public NumericUpDown[] NumericArray { get; set; }
            public object[] FilterArray { get; set; }
            public FilterManipulations(NumericUpDown[] nud, object[] obj)
            {
                NumericArray = nud;
                FilterArray = obj;
            }
        }
Создаю класс вот так:
C#
1
            FilterManipulations fm = new FilterManipulations(nup, obj);
где нужно как-то оформить nup и obj, и если nup я объявил вот так:
C#
1
NumericUpDown[] nup = new NumericUpDown[4] { numericUpDown1, numericUpDown2, numericUpDown3, numericUpDown4 };
то с obj проблема, так как мои функции не являются object, как быть в такой ситуации? Может в корне изменить подход?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2020, 09:48
Ответы с готовыми решениями:

Перегрузка функций. Реализация функций
Разработать функцию f(x) , которая возвращает младшую цифру натурального числа x . Вычислить с ее помощью значение выражения z= f(a) +...

Реализация функций
Подскажите пожалуйста как это расписать в C#

Реализация функций
Здравствуйте, помогите пожалуйста дописать программу, нужно чтобы на кнопки можно было расшифровать и зашифровать, было 4 поля:1- ввод...

31
Добрый пёс
 Аватар для Blasphemie
120 / 86 / 37
Регистрация: 13.09.2020
Сообщений: 254
12.10.2020, 10:32
Студворк — интернет-сервис помощи студентам
У меня браузер не показывает миниатюры. Чинить лень.
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,762
Записей в блоге: 2
12.10.2020, 10:33
belalugoci, вы не можете присваивать элементам массива значения непосредственно в теле класса. Если хотите так, то надо сразу инициализировать
C#
1
2
3
4
public partial class Form1 : Form
    {
        FArr[] adrg = new FArr[] {CLAHE,DoDithering};
}
1
Добрый пёс
 Аватар для Blasphemie
120 / 86 / 37
Регистрация: 13.09.2020
Сообщений: 254
12.10.2020, 10:42
Цитата Сообщение от belalugoci Посмотреть сообщение
adrg[1] = DoDithering;
Цитата Сообщение от belalugoci Посмотреть сообщение
private Bitmap Dithering(Bitmap bmpSrc, decimal PaletteDepth)
DoDithering и Dithering - как бы не одно и то же...
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
12.10.2020, 11:13  [ТС]
Цитата Сообщение от Toros1992 Посмотреть сообщение
вы не можете присваивать элементам массива значения непосредственно в теле класса. Если хотите так, то надо сразу инициализировать
что не приближает к решению проблемы.

Ладно, пишу вот так, но утыкаюсь в другую проблему:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    public class FilterManipulations
    {
        public NumericUpDown[] NumericArray { get; set; }
        public FArr[] FilterArray { get; set; }
        bool ImageReady { get; set; }
        Form1 F { get; set; }
        public FilterManipulations(NumericUpDown[] nud, FArr[] farr, Form1 f)
        {
            NumericArray = nud;
            FilterArray = farr;
            F = f;
        }
        public Bitmap Dithering(Bitmap bmpSrc, decimal PaletteDepth)
        {
            return bmpSrc;
        }
        public Bitmap CLAHE(Bitmap bmpSrc, decimal Fake = 0)
        {
                return bmpSrc;
        }
    }
 
    public partial class Form1 : Form
    {
        static NumericUpDown[] NumericArray = new NumericUpDown[4];
        static FArr[] adrg = new FArr[2];
        FilterManipulations FM = new FilterManipulations(NumericArray, adrg, this);
    }
Бог с ним что там this не работает, я в данном случае о концепции. Как мне заполнить adrg[0] и adrg[1] значениями и передать в конструктор FM если FM принимать должен уже заполненный adrg?
В общем я пока в растерянности.
0
Добрый пёс
 Аватар для Blasphemie
120 / 86 / 37
Регистрация: 13.09.2020
Сообщений: 254
12.10.2020, 11:13
Toros1992, тоже выдаст ошибку. Экземпляр формы еще не создан, нестатические методы пока не доступны.

Надо или CLAHE и DoDithering делать static, или присваивание уносить куда-то внутрь, хоть в Form_Load, что ли...
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
12.10.2020, 11:13  [ТС]
Цитата Сообщение от Blasphemie Посмотреть сообщение
DoDithering и Dithering - как бы не одно и то же...
это одно и тоже, просто особенности переноса кода из VS в браузер.
0
Добрый пёс
 Аватар для Blasphemie
120 / 86 / 37
Регистрация: 13.09.2020
Сообщений: 254
12.10.2020, 11:17
Цитата Сообщение от belalugoci Посмотреть сообщение
Как мне заполнить adrg[0] и adrg[1] значениями и передать в конструктор FM если FM принимать должен уже заполненный adrg?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public partial class Form1 : Form
    {
        FArr[] adrg = new FArr[2] { CLAHE, DoDithering }; //раз 
    
        private static Bitmap CLAHE(Bitmap bmpSrc, decimal Fake = 0) //два 
        {
            return bmpResult = bgr.ToBitmap();
        }
 
        private static Bitmap DoDithering(Bitmap bmpSrc, decimal PaletteDepth) //три 
        {
            return bmpSrc;
        }
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
12.10.2020, 11:19  [ТС]
Цитата Сообщение от Blasphemie Посмотреть сообщение
FArr[] adrg = new FArr[2] { CLAHE, DoDithering }; //раз
это не умеет смысла так как не решает вопроса динамического изменения FArr[].
Ну или делать городушку с лишним массивом соответствия...
0
Добрый пёс
 Аватар для Blasphemie
120 / 86 / 37
Регистрация: 13.09.2020
Сообщений: 254
12.10.2020, 11:33
Тогда присваивание в конструктор формы заталкивать.
C#
1
2
3
4
5
6
7
8
9
10
11
 public FArr[] FilterArray { get; set; }
 
 public Form1()
 
        {
            FilterArray = new FArr[2]
            FilterArray [0] = CLAHE;
            FilterArray [1] = DoDithering;
            FilterManipulations FM = new FilterManipulations(NumericArray, FilterArray, this);
            InitializeComponent();
        }
1
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
12.10.2020, 11:53  [ТС]
Цитата Сообщение от Blasphemie Посмотреть сообщение
Тогда присваивание в конструктор формы заталкивать.
Вы же не станете форму уничтожать и заново создавать чтобы поменять содержимое FArr[]? да и как вы измените FArr[] если присвоение жестко закреплено во время компиляции.
Нужен массив указателей на функции и вызов функций через указатели. Ну это было бы так в Си. А как тут, Бог его знает.
0
Добрый пёс
 Аватар для Blasphemie
120 / 86 / 37
Регистрация: 13.09.2020
Сообщений: 254
12.10.2020, 12:05
Концептуально это должно выглядеть так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System.Drawing;
using System.Windows.Forms;
using FArr = System.Func<System.Drawing.Bitmap, decimal, System.Drawing.Bitmap>;
 
namespace Filters
{
    public class FilterManipulations
    {
        public NumericUpDown[] NumericArray { get; set; }
        public FArr[] FilterArray { get; set; }
        bool ImageReady { get; set; }
        Form1 F { get; set; }
        public FilterManipulations(NumericUpDown[] nud, FArr[] farr, Form1 f)
        {
            NumericArray = nud;
            FilterArray = farr;
            F = f;
        }
    }
 
    
 
    public partial class Form1 : Form
    {
        private FArr[] _farr;
        private NumericUpDown[] _nud;
        
        public Bitmap Dithering(Bitmap bmpSrc, decimal PaletteDepth)
        {
            return bmpSrc;
        }
        public Bitmap CLAHE(Bitmap bmpSrc, decimal Fake = 0)
        {
            return bmpSrc;
        }
 
        public Form1()
        {
            _farr = new FArr[2];
            _farr[0] = CLAHE;
            _farr[1] = Dithering;
            FilterManipulations FM = new FilterManipulations(_nud, _farr, this);
            InitializeComponent();
        }
    }
}
Добавлено через 2 минуты
После такого можно будет менять значения элементов _farr сколько угодно (средствами Form1). Они не гвоздями прибиты, а присвоены в момент инициализации.
1
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
12.10.2020, 12:16  [ТС]
Цитата Сообщение от Blasphemie Посмотреть сообщение
Тогда присваивание в конструктор формы заталкивать.
Ура! Всё работает и не только при компиляции, ошибок нет и при присвоении в самом коде.
Спасибки всем раздаю.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
    public class FilterManipulations
    {
        public NumericUpDown[] NumericArray { get; set; }
        public FArr[] FilterArray { get; set; }
        public FilterManipulations(NumericUpDown[] nud, FArr[] farr)
        {
            NumericArray = nud;
            FilterArray = farr;
        }
    }
 
    public partial class Form1 : Form
    {
        public FArr[] FilterArray { get; set; }
        static NumericUpDown[] NumericArray = new NumericUpDown[4];
 
        public Bitmap Dithering(Bitmap bmpSrc, decimal PaletteDepth)
        {
            return bmpSrc;
        }
 
        public Bitmap CLAHE(Bitmap bmpSrc, decimal Fake = 0)
        {
            return bmpSrc;
        }
 
        private void DoFilters(object sender, EventArgs e)
        {
            if (CLAHEcheckBox1.Checked)
            {
                pictureBox1.Image = ImageSource = FilterArray[0](ImageSource, 0);
            }
        }
 
        public Form1()
        {
            FilterArray = new FArr[2];
            FilterArray[0] = CLAHE;
            FilterArray[1] = Dithering;
            FilterManipulations FM = new FilterManipulations(NumericArray, FilterArray);
 
            InitializeComponent();
        }
 
        private bool Checked()
        {
            if ((CLAHEcheckBox1.Checked || DithcheckBox3.Checked) && ImageReady)
            {
                FilterArray[0] = Dithering;
                return true;
            }
            else
                return false;
        }
 
    }
Добавлено через 4 минуты
Цитата Сообщение от Blasphemie Посмотреть сообщение
Концептуально это должно выглядеть так
Мне кажется необходимость в FilterManipulations теперь отпала, не?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.10.2020, 12:16

Реализация функций
Помогите, пожалуйста, реализовать методы классов (заголовки даны в biTree.g) Я плохо шарю, а завтра сдавать! Очень надо( Дан: biTree.h...

Реализация математических функций
Где можно найти, как реализованы примитивные мат. функции такие, как sqrt, pow, sin, asin, log и другие и сколько примерно тактов...

Реализация функций интерфейса
Есть класс с прототипами - интерфейс (верно?). Наследую от него два класса, А и В. Как мне в этих классах сделать разную реализацию...

Реализация функций ЛВС
Здравствуйте. Имеется ЛВС. Структура примерно такая к серверу черех маршрутизатор подсоединяются две подсети, подсети организуются на...

Реализация функций в БД магазина
Здравствуйте. Сделал БД магазина бытовой техники. Не могу реализовать и не знаю как: При продаже изделий каждый факт продажи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru