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

Делегаты

08.12.2017, 08:51. Показов 1668. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните мне пожалуйста этот код, не могу понять. Учу делегаты, а этот пример не разберу


smethod из метода Age, что выталкивает сообщение? он же принимать должен
я чето запутался
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
 class Program
    {
        public delegate void TestDeligate(string meggage);
 
        class Man
        {
            public void Age(TestDeligate smethod)
            {
                smethod(string.Format("Привет"));
                smethod("asd");
 
            }
        }
 
        static void Main(string[] args)
        {
            Man m = new Man();
            TestDeligate met = showMess;
 
            m.Age(met);
            Console.ReadKey();
        }
        static void showMess(string Message)
        {
            Console.WriteLine(Message);
        }
 
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2017, 08:51
Ответы с готовыми решениями:

Делегаты
Практикуюсь с примерами из учебника Шилдта. using System; class A { static void Main() ...

Делегаты
Надо создать делегат и использовать его вместо функции Console.WriteLine() в запросе от...

Делегаты
Объявим делегат, принимающий два аргумента типа int, и возвращающий int: public delegate int...

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

19
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
08.12.2017, 09:09 2
Метод Age вызывает переданный ему делегат. Больше ничего
0
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
08.12.2017, 10:03  [ТС] 3
объясните пожалуйста для лузера нормально, пошагово. Меня это бесит что я не могу вьехать
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
08.12.2017, 10:04 4
Sayanchik777, делегат - ссылка на [какой-то] метод. Вы "вызываете" делегат, а он "пробрасывает" (делегирует) этот вызов методу, на который он ссылается.
0
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
08.12.2017, 10:19  [ТС] 5
Usaga,
m.Age(met) Вызывает showMess(string Message)
а showMess -у кто параметры передает?
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
08.12.2017, 10:30 6
Sayanchik777, делегат передаёт, который сам их получает в методе Age().
0
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
08.12.2017, 10:30  [ТС] 7
как понять эту строку
C#
1
2
3
4
5
6
            public void Age(TestDeligate smethod)
            {
                smethod(string.Format("Привет"));
                smethod("asd");
 
            }
?
Метод Age который принимает в качестве параметров данные типа TestDeligate?
принял он, что дальше? как вообще текст идет на гору - непойму

то что делегат ссылается на метод - вызываешь делегат а он дает адресс метода. ну этот пример непойму(*(((
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
08.12.2017, 10:34 8
Цитата Сообщение от Sayanchik777 Посмотреть сообщение
то что делегат ссылается на метод - вызываешь делегат а он дает адресс метода. ну этот пример непойму(*(((
Ничего он не "даёт". Делегат - класс сгенерированный компилятором, который при создании получает ссылку на класс и метод, а потом, когда вы "вызываете" делегат, он вызывает метод у класса и передаёт ему все аргументы принятые извне. Так яснее?
0
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
08.12.2017, 10:35  [ТС] 9
ВОТ ЭТОТ ПРИМЕР ПОНИМАЮ
Миниатюры
Делегаты  
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
08.12.2017, 10:40 10
Sayanchik777, ну?
0
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
08.12.2017, 10:46 11
Sayanchik777, представьте, что делегат, это что-то типа "виртуальной" процедуры.
0
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
08.12.2017, 10:47  [ТС] 12
пример на скриншоте мнепонятен.
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
class Program
    {
        public delegate void TestDeligate(string meggage);
 
        class Man
        {
            public void Age(TestDeligate smethod)
            {
                smethod(string.Format("Привет"));
                smethod("asd");
 
            }
        }
 
        static void Main(string[] args)
        {
            Man m = new Man();
            TestDeligate met = showMess;
 
            m.Age(met);
            Console.ReadKey();
        }
        static void showMess(string Message)
        {
            Console.WriteLine(Message);
        }
 
    }
а здесь я не пойму ничего
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
08.12.2017, 10:49 13
Лучший ответ Сообщение было отмечено Sayanchik777 как решение

Решение

Sayanchik777, вам сложно осознать, что делегат можно передавать в виде аргумента в метод класса? А то, что целый класс можно передавать и его методы дёргать - понятно?)
1
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
08.12.2017, 10:51  [ТС] 14
C#
1
2
3
4
Man m = new Man();
            TestDeligate met = showMess;
 
            m.Age(met);
блин, начну по порядку
окей, что попадает в параметры m.Age(met); Текст? или ссилка на showMess(string Message)?
0
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
08.12.2017, 10:53 15
пример использования делегата при интегрировании разных функций
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication3
{
    class Program
    {
        public delegate double Function(double x);
 
        public static double Rectangular(Function f, double a, double b, int n)
        {
            double sum = 0.0;
            double h = (b - a) / n;
            for (int i = 0; i < n; i++)
            {
                sum += h * f(a + i * h);
            }
            return sum;
        }
 
          static double f(double x)
        {
            return Math.Sin(x);
        }
        static double df(double x)
        {
            return Math.Cos(x);
        }
        static void Main(string[] args)
        {
            int n = 1000;
            double result1, result2;
            double a = 0.0;
            double b = 1.0;
 
            Console.WriteLine("df(x) = cos(x)");
 
            result1 = f(b) - f(a);
            Console.WriteLine("Analytic result         = " + result1.ToString());
 
            result2 = Rectangular(df, a, b, n);
            Console.WriteLine("Result using function   = " + result2.ToString());
 
            Console.WriteLine("f(x) = sin(x)");
            result1 = df(b) - df(a);
            Console.WriteLine("Analytic result         = " + result1.ToString());
 
            result2 = Rectangular(f, a, b, n);
            Console.WriteLine("Result using function   = " + result2.ToString());
            Console.ReadLine();
        }
    }
}
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
08.12.2017, 10:55 16
Цитата Сообщение от Sayanchik777 Посмотреть сообщение
окей, что попадает в параметры m.Age(met); Текст? или ссилка на showMess(string Message)?
Попадает то, что вы передали - ссылка на делегат.
0
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
08.12.2017, 11:02  [ТС] 17
Цитата Сообщение от Usaga Посмотреть сообщение
Sayanchik777, вам сложно осознать, что делегат можно передавать в виде аргумента в метод класса? А то, что целый класс можно передавать и его методы дёргать - понятно?)

Ааааа....теперь прочитал ваше сообщение, по моему вроде врубаюсь.

получается аргументом метода age является showMess ------> то есть передается метот что выводит строку в консоле ----->m.Age(met);

C#
1
2
3
4
5
6
            public void Age(TestDeligate smethod)
            {
                smethod(string.Format("Привет"));
                smethod("asd");
 
            }
а теперь это метод showMess называется smethod. правильно?
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
08.12.2017, 11:15 18
Цитата Сообщение от Sayanchik777 Посмотреть сообщение
получается аргументом метода age является showMess
НЕТ. Аргументом является делегат. Делегат - обычный класс. Вы даже его тип можете изучить (GetType()) и увидеть, что это реально класс, унаследованный от класса Delegate.
0
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
08.12.2017, 11:23  [ТС] 19
Usaga, а как воспользоваться GetType() ?
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
08.12.2017, 11:30 20
Sayanchik777, это метод любого объекта. Можно и в отладчике посмотреть, что к чему.
0
08.12.2017, 11:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2017, 11:30
Помогаю со студенческими работами здесь

Делегаты
Добрый день, пытаюсь разобраться с делегатами и не совсем понятен один момент, может кто-то...

Делегаты
Почему так компилируется Func&lt;decimal, decimal&gt; f = null; f=x =&gt; x &gt; 1...

Делегаты
Помогите разобраться: 1. Почему не выводит время на экран? это пример из учебника (Learn C# 3.0...

Делегаты
Объясните пожалуйста, доходчиво и &quot;по-детски&quot;: как использовать, для чего нужны, в каких именно...

Делегаты
Вопрос о реализации групповых вызовов в делегатах. К примеру я создал такой класс: class...

Делегаты
Доброго времени суток. Будьте добры, помогите разобраться с применением делегатов. К примеру, нужно...


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

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