Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160

Можно ли передавать ссылку процедуры как параметр?

07.05.2011, 14:45. Показов 2494. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравсвтуйте,можно ли передавать ссылку процедуры как параметр ? и как принимать ?,заранее спасибо.
P.S. и как её вызывать то ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2011, 14:45
Ответы с готовыми решениями:

Можно ли массив передавать как параметр?
Всем доброго дня! Короче, есть несеолько массивов, скажем два; - arrb и arrc. И есть функция типа int count();. Надо чтобы эта функция...

Можно ли передать множество как параметр процедуры
Всем доброго времени суток, нужен совет по поводу: Можно ли в free pascal передать множество как параметр процедуры? Если можно, то как,...

Можно в src передавать параметр, например, src='1.asp?par=3'?
Можно в src передавать параметр, например, src='1.asp?par=3'?

12
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
07.05.2011, 14:46
Почитайте про делегаты.
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
07.05.2011, 14:57  [ТС]
делегаты делегатами,а вот в качестве параметра как делегат то впихнуть ? и,если у меня по индексу массива он будет вызываться,то тем более как это сделать ?
0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
07.05.2011, 14:59
Приведите конкретную задачу пожалуйста (или кусок задачи).
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
07.05.2011, 15:06  [ТС]
В main()
C#
1
MenuCreator.Creator(1, 3, 4, '|', ConsoleColor.Red, ConsoleColor.Green, "Режимы",  [I]Тут ссылка на процедуру в качестве параметра[/I], 1);
В отдельном классе

C#
1
2
3
4
public static string[] manipulation = new string[numbersmenu];
 
public static void Creator(byte mode, byte indent, byte indentFromBorder, char symbolBorder, ConsoleColor colorText, ConsoleColor colorBorder,string namemenu,[I]Тут будет приниматься ссылка manipulation[/I], byte number)
                    MenuCreator.manipulation[number] = manipulation;

В новой процедуре Control()
C#
1
2
3
4
                               if (ControlMode1Enter[0] == 1 && ControlMode1Enter[0] == a)
                                {
                                    manipulation[a];
                                }
Ну как объяснить ещё ,незнаю )
0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
07.05.2011, 15:15
Метод manipulation дали бы лучше
Ну, если бы он принимал одно значение int и возвращал бы String
C#
1
2
3
4
5
6
7
8
9
10
11
12
    internal delegate string Creator(int c);
    internal class Program
    {
        public static Creator Cr;
        private static void Main()
        {
            Cr = Method;
            Cr(3);
            Cr = Method2;
            Cr(3);
        }
}
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
07.05.2011, 15:23  [ТС]
нее,метод манипулятион это ссылка,она содержит ссылку на процедуру,а так она просто должна как бы содержать ссылку ,просто код я не хочу кидать,это называет фиг поймёшь,там я понапихал и исправляю всё,вот создал меню вроде,почти работает,теперь хочу привязать к нажатию ентер в одном из меню строки он будет выдавать процедуру по ссылке в качестве массива.

сейчас напишу что-то типа короче покажу,не правильно ,но суть должна быть понятна:

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
class program
{
static void Main()
{
MenuCreator.Creator(1, 3, 4, '|', ConsoleColor.Red, ConsoleColor.Green, "Режимы",  [I]Тут ссылка на процедуру в качестве параметра[/I], 1);
}
}
class MenuCreator()
{
        public static string[] manipulation = new string[numbersmenu]; //!!!!!! не правильно,но предположим строковой тип
        public static byte[] mode=new byte[numbersmenu];
        public static byte[] indent=new byte[numbersmenu];
        public static byte[] indentFromBorder=new byte[numbersmenu];
        public static char[] symbolBorder=new char[numbersmenu];
        public static ConsoleColor[] colorText=new ConsoleColor[numbersmenu];
        public static ConsoleColor[] colorBorder=new ConsoleColor[numbersmenu];
        public static string[] namemenu=new string[numbersmenu];
 
public static void Creator(byte mode, byte indent, byte indentFromBorder, char symbolBorder, ConsoleColor colorText, ConsoleColor colorBorder,string namemenu,[I]Тут будет приниматься ссылка manipulation[/I], byte number)
{
                    MenuCreator.mode[number] = mode;
                    MenuCreator.indent[number] = indent;
                    MenuCreator.indentFromBorder[number] = indentFromBorder;
                    MenuCreator.symbolBorder[number] = symbolBorder;
                    MenuCreator.colorText[number] = colorText;
                    MenuCreator.colorBorder[number] = colorBorder;
                    MenuCreator.namemenu[number] = namemenu;
                    MenuCreator.manipulation[number] = manipulation;
}
public static void Control()
{
for(bla bla bla massiv a)
{
if(mode[a]==1)
{
bla bla bla
                                if (ControlMode1Enter[0] == 1 && ControlMode1Position[0] == a) //enter  0 это временно ,т.к. недоработал
                                {
                                    Console.WriteLine(manipulation[a]); //Что-бы тут он вызывал метод по ссылке
                                }
}
}
}
}
0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
07.05.2011, 15:27
Вы мб не так поняли

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
    internal delegate string Creator(int c);
    internal class Program
    {
        public static Creator Cr;
        private static void Main()
        {
            Cr = Method;
            TestDelegate(Cr);
            Cr = Method2;
            TestDelegate(Cr);
            Console.ReadKey(true);
        }
        static void TestDelegate(Creator c)
        {
            c(3);
        }
        static string Method(int a)
        {
            Console.WriteLine(a.ToString());
            return string.Empty;
        }
        static string Method2(int a)
        {
            Console.WriteLine((a+1).ToString());
            return string.Empty;
        }
}
Вот и передача делегата по ссылке, и присваивание, и объявление делегата.
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
07.05.2011, 15:48  [ТС]
Тут ведь функции,они принимают целое число ,а после переобразуют в строку и выдают,но мне нужна ссылка не как значение,а как параметр ссылки на процедуру.

опять не правильный пример :
C#
1
internal delegate string Creator(VOID!! c);
или же
C#
1
2
3
4
5
MenuCreator.Creator(1, 3, 4, '|', ConsoleColor.Red, ConsoleColor.Green, "Режимы", void root(), 1);
        public static void Creator(byte mode, byte indent, byte indentFromBorder, char symbolBorder, ConsoleColor colorText, ConsoleColor colorBorder, string namemenu, void manipulation, byte number)
Потом уже
вызов 
manipulation[a]();
ну бредово написал,но вот типа так .Ещё раз извиняюсь если вы мне это объясняете ,если это ,то я пойду учуться =)))

Что-то типа параметр ссылки процедуры в делегате,не тип.

Извините если я не понимаю...
0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
07.05.2011, 16:04
Цитата Сообщение от sptes Посмотреть сообщение
опять не правильный пример :
C#
1
internal delegate string Creator(VOID!! c);
Здесь
C#
1
delegate возвращаемый_тип Название(тип параметр1, ..., тип параметрN);
0
8 / 8 / 1
Регистрация: 16.02.2011
Сообщений: 160
07.05.2011, 16:08  [ТС]
а как я посредством типа вызову процедуру из другого класса ? имя лишь строковой тип название процедуры ? =),Я не достал вас ещё?))

вместо возращаемого типа можно ли ссылку на процедуру взять ?
delegate void p (string nameVoid); ?
0
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
07.05.2011, 16:22
Цитата Сообщение от sptes Посмотреть сообщение
а вот в качестве параметра как делегат то впихнуть ?
а в чем проблема передать делегат?
C#
1
2
3
4
5
6
public void Func(Delegate dele)
{
 
      telo func
 
}
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
07.05.2011, 16:22
sptes, я не смотрел конкретно ваш код, но я написал пример использования метода как параметра
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
using System;
 
namespace SomeNamespace {
    class Program {
        delegate void Gteeting(string name);
 
        static void PrintHallo(string name) {
            Console.WriteLine("Hallo, {0}",name);
        }
        static void PrintBye(string name) {
            Console.WriteLine("Bye, {0}",name);
        }
 
        static void SomeGreeting(Gteeting gr, string name) {
            gr.Invoke(name);
        }
 
        static void Main() {
            SomeGreeting(PrintHallo, "Kittie");
            SomeGreeting(PrintBye, "Kittie");
            Console.ReadKey();
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2011, 16:22
Помогаю со студенческими работами здесь

Можно ли вывести выходной параметр процедуры
Здраствуйте подскажите пожалуйста как вывести на экран выходной параметр процедуры без дополнительных переменных procedure znak(var...

Как передавать ссылку на структуру в map?
Надо два контейнера один вектор со структурами второй мап с сылками на те структуры. Но вот проблема в map<int, Test*> itag после...

Как передавать уникальный параметр в Get или Post из электронной почты?
Есть почтовая рассылка (на 1с-битрикс, но это не суть.) Нужно сделать некое отслеживание...хозяин какого e-mail зашел по той или иной...

Как передавать ссылку на экземпляр класса между Activity?
Если в MainActivity я создаю ссылку (SaveDataObj ) на класс и выделяю память (new SaveData()) под экземпляр класса. как этот объект...

Как правильно передавать функцию как параметр?
Всем првет! Я кодю на OpenGL и сделал клас Game у меня в етом класе есть функция DrawGLScene(); как мне передать ее в ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru