1 / 1 / 0
Регистрация: 27.02.2010
Сообщений: 190

Делегаты: каков их смысл

27.11.2012, 00:02. Показов 4110. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните новичку, какой смысл в делегатах, кроме того, что переменной можно присвоить функцию, и вызывать функцию с помощью этой переменной? И это ли основной смысл делегатов?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2012, 00:02
Ответы с готовыми решениями:

Интерфейсы и делегаты. Каков функционал IEnumerable в приведенном коде
пробую так, но не очень то получается и прошу объяснить при чем тут IEnumerable namespace ConsoleApplication { class Program ...

Ключевые слова get и set: каков в них смысл и назначение
Поясните, я правильно понимаю, что эта конструкция помогает строго определить, какие действия будут выполнятся и какими элементами...

Каков смысл конструкций?
Каков смысл конструкций типа: if (@$_SESSION) // и т.д. // ... if (@$_SERVER == "on") // ... Зачем там используется оператор...

12
Заблокирован
27.11.2012, 01:17
пожалуйста прочитайте вот это: http://msdn.microsoft.com/ru-r... 73171.aspx

Добавлено через 20 минут
вот простейший пример использования, попробуйте разобраться с этим кодом.
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
    class Program
    {
        private static int CompareByName(Item item1, Item item2)
        {
            return item1.Name.CompareTo(item2.Name);
        }
 
        private static int CompareById(Item item1, Item item2)
        {
            return item1.ID.CompareTo(item2.ID);
        }
 
 
        struct Item
        {
            public readonly int ID;
            public readonly string Name;
 
            public Item(string name, int id)
            {
                ID = id;
                Name = name;
            }
 
            public override string ToString()
            {
                return string.Format("ID: {0}; Name: {1}", ID, Name);
            }
        }
 
        static void Main(string[] args)
        {
            var items = new List<Item>();
            items.Add(new Item("Andrey", 9));
            items.Add(new Item("Sergey", 23));
            items.Add(new Item("Tty", 2));
            Console.WriteLine("=======Sort by ID==============");
            Comparison<Item> cmpById = CompareById;
            items.Sort(cmpById);
            Array.ForEach(items.ToArray(), (item) => Console.WriteLine(item));
            Console.WriteLine("=======Sort by Name============");
            Comparison<Item> cmpByName = CompareByName;
            items.Sort(cmpByName);
            Array.ForEach(items.ToArray(), (item) => Console.WriteLine(item));
            Console.ReadKey();
        }
    }
0
1 / 1 / 0
Регистрация: 27.02.2010
Сообщений: 190
27.11.2012, 19:24  [ТС]
msdn не очень воспринимаю, так как я не из России и не понимаю заумных слов. Код смог запустить, но не смог разобрать из-за непонимания многих частей. Может ли кто-то объяснить простыми, не заумными словами?
Разве что я понял, что
Делегаты используются для передачи методов в качестве аргументов к другим методам
Это ли их основная суть? То есть я смогу передать какой-то делегат в какую-то функцию как параметр?
0
1 / 1 / 0
Регистрация: 27.11.2012
Сообщений: 19
27.11.2012, 19:33
Ещё пример

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
delegate void del1 ( int x);
 
 class a
{
  int y = 10;
   public  void func1(int x)
    { y = y + x; Console.WriteLine("x+y=" + y); } }
    class b : a
    {
       int z = 15;
      public   void func2(int x)
        { z = z + x; Console.WriteLine("z+x=" + z); }
    }
    class c
    {
        int o = 20;
     public    void func3(int x)
        { o = o + x; Console.WriteLine("o+x=" + o); }
    }
  class Program
  {
    static void Main()
    {
        a first = new a();
        b second = new b();
        c third = new c();
        del1 delegat = new del1(first.func1);
        delegat(10);
        Console.WriteLine("=================");
        del1 delegat2 = new del1(second.func2);
        delegat2(10);
        Console.WriteLine("====================");
        del1 delegat3 = new del1(third.func3);
        delegat3(10);
        Console.WriteLine("====================");
        delegat += delegat2;
        delegat += delegat3;
        delegat(30);
        del1 delegat4 = new del1(third.func3);
        delegat4+= new del1(second.func2);
        delegat4(100);
    }
}
0
1 / 1 / 0
Регистрация: 27.02.2010
Сообщений: 190
27.11.2012, 20:45  [ТС]
В последнем примере не понял как получилось 50 в строке
delegat += delegat2;
Не понял, что тут накопилось?

Но повторюсь, мне важнее узнать в чем основная суть делегатов, в чем их основной смысл. А примеры могут показать лишь варианты их использования, в которых не всегда видно зачем это вообще делать...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.11.2012, 21:03
bosscs, ну вот например, в качестве примера мой старый код:
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
using System;
 
namespace ConsoleApplication50
{
    internal class Program
    {
        private static double Func1(double x)
        {
            return 5 * x; // y = 5x;
        }
 
 
        private static double Func2(double x)
        {
            return 2 - x; // y = 2 - x;
        }
 
 
        private static void Main()
        {
            bool result = Intersect(Func1, Func2, -10, 10);
            Console.WriteLine(result);
            result = Intersect(Func1, Func2, -10, 0);
            Console.WriteLine(result);
            Console.ReadKey();
        }
 
 
        private static bool Intersect(Func<double, double> f, Func<double, double> g, double a, double b)
        {
            return (g(a) - f(a)) * (g(b) - f(b)) <= 0;
        }
    }
}
Функция Intersect проверяет любые две функции линейного вида на пересечение (это нигде не проверяется, просто для нелинейных (вернее для функций, имеющих экстремум) будет даваться неверный результат (если быть точным, функция возвращает, пересекаются ли функции нечентное число раз. Для линии возможные варианты - 0 или 1, для функций высших порядков - варианты от 0 пересечений до n) на интервале от a до b.

Так как мне нужно передавать функции как параметр другую функцию, меня спасает делегат (в данном случае это предусмотренный в Framework делегат Func<T,T>). Вот в общем-то и все.
1
1 / 1 / 0
Регистрация: 27.02.2010
Сообщений: 190
27.11.2012, 22:58  [ТС]
Я уже совершенно запутался. Я не успеваю разбирать ваши примеры. Все пишут свои примеры, которые им кажутся. простейшими. Естественно они простейшие только для них, но не для новичков.
Первый пример вообще откидываю, он никак не простейший для меня.
Во втором примере, который в разы проще, все еще не ясно, что делает строка
delegat += delegat2;
В третьем примере, какие-то пересечения, экстремумы и прочий бред, который сбивает со смысла делегатов.

Если уж и выкладывать примеры, то максимально простые, без лишнего запутывающего кода.
Я же попросил просто написать, в чем основной смысл делегатов(Просто взять словами и написать). Все. Даже примеры мне сейчас не нужны. Вы же мне написали кучу примеров, которые я не понимаю из-за недостатка знаний. Еще раз попрошу, ответить кого-то простыми, понятными для новичка словами.

Допустим недавно я изучал интерфейсы, и как я понял, основная их задача - описывать методы, которые будут реализованы позже, в наследуемых класса. Все. Разве нельзя взять и точно определить ОСНОВНУЮ задачу делегатов?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.11.2012, 23:01
bosscs, последний мой пример 8 строк, где что-то происходит, куда уж проще? Еще и расписал все как мог...
Во втором примере, который в разы проще, все еще не ясно, что делает строка
delegat += delegat2;
Эта строчка - привязка к делегатку метода. То есть при вызове делегата вызываются все методы, которые к нему привязаны. Если непонятно - уж извините, то, что человек написал - не самый простой пример...
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
27.11.2012, 23:08
Цитата Сообщение от bosscs Посмотреть сообщение
какой смысл в делегатах
Смысл в том, чтобы вызывать различные методы, не меняя код, откуда происходит вызов (например, если доступа к этому коду нет).
То же самое, что интерфейсы, но в пределах метода.

Цитата Сообщение от bosscs Посмотреть сообщение
я не из России и не понимаю заумных слов.
msdn есть и на английском (подумать только!).
1
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
27.11.2012, 23:11
Цитата Сообщение от bosscs Посмотреть сообщение
Я же попросил просто написать, в чем основной смысл делегатов
В делегат можно "запихнуть" метод (ссылку )и через делегат запустить его.
Затем этот метод можно "выкинуть" из делегата и "запихнуть" другой.

Имея один делегат, можно запускать им разные методы (даже группу методов)

Единственное, сигнатуры этого делегата и методов, должны совпадать
1
1 / 1 / 0
Регистрация: 27.02.2010
Сообщений: 190
27.11.2012, 23:19  [ТС]
Цитата Сообщение от Psilon
Если непонятно - уж извините, то, что человек написал - не самый простой пример...
Да тут не за что извинять, просто никто не может понять, что конкретно мне нужно. А ведь, как я думаю, написал конкретно что мне нужно еще в первом посту.

На счет строки:
Эта строчка - привязка к делегатку метода. То есть при вызове делегата вызываются все методы, которые к нему привязаны.
Понял.

Всем спасибо, вроде бы в моей глупой голове сформировалось понятия о делегатах, в принципе основная суть осталась та же.
0
Заблокирован
28.11.2012, 01:25
Извините, но я хочу задать вопрос:
Вы с какой целью интересуетесь? Вы, я так понимаю, хотите стать разработчиком кодером не прочитав ни строчки, я уже не говорю о книгах, статьи на MSDN.
С вашими знаниями на данный момент вопрос о смысле делегатов сродни тому, что если бы ко мне подошел мой 7 ребенок и спросил:
"Пап, а какой смысл в производной?" Я бы смог объяснить, но мне пришлось бы ввести и объяснить еще очень много дополнительных понятий, но без желания учиться последнего все равно это был бы пустой звон.
Подумайте о выборе профессии, пока не поздно.

Мой пример был предельно прост, за исключением, может быть лямбда выражений, но это был просто один из способов вывода результата.

Успехов.
1
1 / 1 / 0
Регистрация: 27.02.2010
Сообщений: 190
28.11.2012, 16:30  [ТС]
не прочитав ни строчки
Я прочитал довольно много(для меня) строк.
Кодером быть не планирую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2012, 16:30
Помогаю со студенческими работами здесь

Каков смысл ссылок?
Просветите, пожалуйста, новичка. Я размещаю статьи одной тематики на внутренних страницах своего сайта. Если в этих статьях есть ключевые...

Каков физический смысл значения r(-t)?
Здравствуйте! Помогите с задачей из 3 слов. Каков физич. смысл значения r(-1) Вот контекст:

Каков смысл этой строки
tail -1 results | grep 'OK' &gt; /dev/null здесь мы выводим последнюю строку из results + находим строку в которой есть OK и все это в...

Каков смысл регулярного выражения в данном коде?
Здравствуйте! можете подсказать по коду. страница сохраняет куки. а вот какой смысл регулярного выражения? &lt;html&gt; ...

A=$(( 5 + 3 )), каков смысл использования двойных круглых скобок?
Дана следующая конструкция в bash: a=$(( 5 + 3 )) Каков смысл использования двойных круглых скобок? Выберите один ответ: 1...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru