Загрузка...

Why do we need delegates if you can just call a method ???

Thread in C# created by SellerNumbOne Mar 13, 2021. 241 view

  1. SellerNumbOne
    SellerNumbOne Topic starter Mar 13, 2021 МАМA ДУМАEТ ЧТО Я ГДЕ-ТО ВАЙТИ 65 Feb 9, 2019
    Объясните пожалуйста, а то для меня пока их существование бессмысленное
     
  2. Brudagon
    Brudagon Mar 13, 2021 443 Dec 7, 2017
    SellerNumbOne, код, нуждающийся в выполнении действия, не знает метода вызова, когда он написан. Можно вызвать метод напрямую только в том случае, если знаете во время компиляции, какой метод вызывать, не так ли? Поэтому, если вы хотите абстрагировать идею "perform action X at the appropriate time", вам нужно некоторое представление действия, чтобы метод, вызывающий действие, не знал точную реализацию заранее.
     
    1. SellerNumbOne Topic starter
      Brudagon, С трудом понимаю, можешь навести пример?
  3. GamerVII
    GamerVII Mar 13, 2021 Banned 204 Feb 8, 2017
    Лично я использую их так:
    Иногда тебе в метод нужно добавить исполняемый код, которого там нет, для этого делегаты прекрасно подойдут
     
  4. Shellar
    С помощью одного делегата ты сможешь выполнять разные куски кода и передавать их в другие функции
     
  5. SijyKijy
    SijyKijy Mar 19, 2021 Сгнил 34 Mar 10, 2017
    Загугли callback и станет чуть яснее
     
  6. lucifersatana13
    Смотри, постараюсь объяснить на доступном примере(весь код в конце)
    Допустим у нас класс Person, у которого есть свойства Name и LastName. Есть метод, возвращающий эти значения.
    И нам нужно реализовать вывод, но неизвестно выводить будем в консоль или на тот же WinForms.
    Тут на помощь приходят делегаты, которые хранят в себе ссылку на метод. В данном случае в делегат мы засовываем ссылку на метод с такой же сигнатурой и выводим нужное нам сообщение в консоль.
    Code
    namespace TestConsole
    {
    public delegate void ShowInfo(string message);
    class Person
    {
    public string Name { get; set; }
    public string LastName { get; set; }

    public Person(string name, string lastName)
    {
    Name = name;
    LastName = lastName;
    }

    public string GetInfo()
    {
    return $"Меня зовут {Name}, а фамилия {LastName}";
    }
    }
    }
    Code
    class Program
    {
    static void Main(string[] args)
    {
    Person johnSmith = new Person("John", "Smith");

    ShowInfo showInfo = WriteInConsole;
    showInfo.Invoke(johnSmith.GetInfo());
    }


    private static void WriteInConsole(string message)
    {
    Console.WriteLine(message);
    }
    }
     
  7. forvision1
    forvision1 Mar 23, 2021 17 Feb 26, 2021
    Банальный пример
    Делегат на уведомление пользователя
    однако пользователь может выбрать разные способы уведомления(смс, почта, очное уведомление)
    При этом тебе нужно как-то описать уведомление в своей программе - делегаты отлично подойдут
     
Top
Loading...