Загрузка...

Зачем нужны делегаты если можно просто вызвать метод???

Тема в разделе C# создана пользователем SellerNumbOne 13 мар 2021. 236 просмотров

  1. SellerNumbOne
    SellerNumbOne Автор темы 13 мар 2021 МАМA ДУМАEТ ЧТО Я ГДЕ-ТО ВАЙТИ 65 9 фев 2019
    Объясните пожалуйста, а то для меня пока их существование бессмысленное
     
  2. Brudagon
    Brudagon 13 мар 2021 444 7 дек 2017
    SellerNumbOne, код, нуждающийся в выполнении действия, не знает метода вызова, когда он написан. Можно вызвать метод напрямую только в том случае, если знаете во время компиляции, какой метод вызывать, не так ли? Поэтому, если вы хотите абстрагировать идею "perform action X at the appropriate time", вам нужно некоторое представление действия, чтобы метод, вызывающий действие, не знал точную реализацию заранее.
     
    1. SellerNumbOne Автор темы
      Brudagon, С трудом понимаю, можешь навести пример?
  3. GamerVII
    GamerVII 13 мар 2021 Заблокирован(а) 204 8 фев 2017
    Лично я использую их так:
    Иногда тебе в метод нужно добавить исполняемый код, которого там нет, для этого делегаты прекрасно подойдут
     
  4. Shellar
    Shellar 13 мар 2021 Заблокирован(а)
    С помощью одного делегата ты сможешь выполнять разные куски кода и передавать их в другие функции
     
  5. SijyKijy
    SijyKijy 19 мар 2021 Сгнил 34 10 мар 2017
    Загугли callback и станет чуть яснее
     
  6. lucifersatana13
    Смотри, постараюсь объяснить на доступном примере(весь код в конце)
    Допустим у нас класс Person, у которого есть свойства Name и LastName. Есть метод, возвращающий эти значения.
    И нам нужно реализовать вывод, но неизвестно выводить будем в консоль или на тот же WinForms.
    Тут на помощь приходят делегаты, которые хранят в себе ссылку на метод. В данном случае в делегат мы засовываем ссылку на метод с такой же сигнатурой и выводим нужное нам сообщение в консоль.
    Код
    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}";
    }
    }
    }
    Код
    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 23 мар 2021 17 26 фев 2021
    Банальный пример
    Делегат на уведомление пользователя
    однако пользователь может выбрать разные способы уведомления(смс, почта, очное уведомление)
    При этом тебе нужно как-то описать уведомление в своей программе - делегаты отлично подойдут
     
Загрузка...
Top