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

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

27.11.2012, 00:02. Показов 4055. Ответов 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
6101 / 4957 / 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
6101 / 4957 / 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru