Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 617
1

Очередная тема про делегаты

31.01.2016, 12:55. Показов 1512. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Пытаюсь разобраться с делегатами. Написал такую программу:
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
using System;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
 
namespace ConsoleApplication1
{
    delegate void MyDelegate();
 
    class Program
    {
        static void Main(string[] args)
        {
            Ping pi = new Ping();
            Pong po = new Pong();
            MyDelegate ping = pi.PingMethod;
            MyDelegate pong = po.PongMethod;
            while (true)
            {
                Console.WriteLine(ping);
                Console.WriteLine(pong);
                Thread.Sleep(2000);
                
            }
            
        }
 
    }
    class Ping
    {
        public void PingMethod()
        {
            Console.WriteLine("Пинг");
            Console.WriteLine("Получил Понг");
            Console.WriteLine("Отправляю Пинг");
 
        }
        
    }
    class Pong
    {
        public void PongMethod()
        {
            Console.WriteLine("Понг");
            Console.WriteLine("Получил Пинг");
            Console.WriteLine("Отправляю Понг");
        }
    }
}
Не понимаю, как мне в цикле выводить все то, что у меня в методе? Сейчас вывод программы такой:
ConsoleApplication1.MyDelegate
ConsoleApplication1.MyDelegate
ConsoleApplication1.MyDelegate
ConsoleApplication1.MyDelegate
ConsoleApplication1.MyDelegate
ConsoleApplication1.MyDelegate

А мне нужно, чтобы вывод был как в методах.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2016, 12:55
Ответы с готовыми решениями:

Очередная тема про сортировку
Всех с 2020, овощ на форуме. Требуется сортировать img формата "YYYY-MM-DD_HH.MM.SS"*.png по...

Очередная тема про BSOD
В общем, взываю о помощи, граждане. Провел частичный апгрейд своего ПК (заменил процессор и...

Очередная тема про с подключением MySQL
Вообщем пытался я подключиться к БД. Долго мучился, получилось. Закрыл проект. Решил еще раз...

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

8
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
31.01.2016, 12:57 2
Лучший ответ Сообщение было отмечено Chizel как решение

Решение

C#
1
2
3
4
5
6
7
            while (true)
            {
                ping();
                pong();
                Thread.Sleep(2000);
                
            }
1
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 617
31.01.2016, 13:01  [ТС] 3
Ага, понятно. То есть раз делегат содержит ссылку на метод, то его и вызывать как метод надо, верно?
0
TheGreatCornholio
1254 / 732 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
31.01.2016, 13:04 4
https://msdn.microsoft.com/ru-... e99aa.aspx
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
31.01.2016, 13:05 5
Цитата Сообщение от Chizel Посмотреть сообщение
раз делегат содержит ссылку на метод, то его и вызывать как метод надо, верно?
Да, только не "надо", а "можно"
0
26 / 26 / 14
Регистрация: 09.06.2014
Сообщений: 162
31.01.2016, 13:08 6
У вас методы возвращают void, Console.WriteLine(и тут метод который возвращает void) несусветная глупость.
0
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 617
31.01.2016, 13:14  [ТС] 7
Цитата Сообщение от kolorotur Посмотреть сообщение
Да, только не "надо", а "можно"
А еще как можно?
Цитата Сообщение от kv4sha Посмотреть сообщение
У вас методы возвращают void, Console.WriteLine(и тут метод который возвращает void) несусветная глупость.
Это понятно, я потому и спрашивал, что сам не мог понять, как вызывать делегаты. Вывод в консоли понятен, любой объект в консоль можно сунуть и консоль выдаст этот объект.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
31.01.2016, 13:15 8
Цитата Сообщение от kv4sha Посмотреть сообщение
несусветная глупость
Совершать глупости в процессе обучения — нормально.

Добавлено через 40 секунд
Цитата Сообщение от Chizel Посмотреть сообщение
А еще как можно?
Например, так:
C#
1
ping.Invoke();
Или так:
C#
1
ping.BeginInvoke();
1
26 / 26 / 14
Регистрация: 09.06.2014
Сообщений: 162
31.01.2016, 13:19 9
У вас проблема не в вызове делегата, а в том что вы в методах возвращаете не то. Если вы хотели сделать то надо было так:
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
using System;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
 
namespace ConsoleApplication1
{
    delegate string MyDelegate();
 
    class Program
    {
        static void Main(string[] args)
        {
            Ping pi = new Ping();
            Pong po = new Pong();
            MyDelegate ping = pi.PingMethod;
            MyDelegate pong = po.PongMethod;
            while (true)
            {
                Console.WriteLine(ping);
                Console.WriteLine(pong);
                Thread.Sleep(2000);
                
            }
            
        }
 
    }
    class Ping
    {
        public void PingMethod()
        {
            //этот метод по аналогии
            Console.WriteLine("Пинг");
            Console.WriteLine("Получил Понг");
            Console.WriteLine("Отправляю Пинг");
 
        }
        
    }
    class Pong
    {
        public string PongMethod()
        {
            string res = "";
 
            res += "Понг\r\n";
            res += "Получил Пинг\r\n";
            res += "Отправляю Понг";
 
            return res;
        }
    }
}
0
31.01.2016, 13:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2016, 13:19
Помогаю со студенческими работами здесь

Очередная тема по выбору ЯП
Это наверное сто тысяч первая тема по данному вопросу, но определиться все же никак не могу. Давно...

Очередная тема с темным монитором
Здравствуйте! Да да знаю тем с непоказывающими мониторами полно, но мой случай показался мне...

Очередная тема насчет пропажи места на локальном диске
Ребята, помогите, пропало место на локальном диске, не хватает 30 гб свободного места :С Файл...

Очередная тема в которой человек не может войти в биос
Очередная тема в которой человек не может войти в биос)) Ноутбук Fujitsu ah532(не думаю что это...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru