C#

Картинка взята из METANIT.COM 6 глава Делегаты

Вопрос 1: Что такое this.sum и зачем это использовать, почему нельзя просто создать другое поле класса и его использовать ?
Вопрос 2: Долго пытался понять зачем, как, почему, что ? Что тут происходит и зачем


Заранее спасибо за ответы!
Жека
Жека
8
this.sum - обращение к полю класса sum (которое объявлено в самом начале класса - ещё до методов). Если написать просто sum - это обращение к формальному параметру sum.

taken = del; - присваивание полю класса taken (которое объявлено в самом начале класса - ещё до методов) значения формального параметра del. Т.к. в данном случае конфликта имён нет и this. перед taken писать не требуется.

Это не "делегаты", а элементарные базовые знания ООП, которые изучались много уроков назад и, похоже, прошли мимо твоего сознания.

Имя переменной, поля, параметра, метода должно отображать его смысл. Если это сумма, зачем называть как-то иначе?
КА
Канат А
84 868
Лучший ответ
Жека
  1. Почему нельзя было сделать так ? Разве это не одно и тоже
  1. К сожалению так и не понял смысл этого и зачем оно.
  2. Я просто смотрю курс и, закрепляю информацию из курса с помощью Метанита, курс от Code Blog и если ты его смотрел ты можешь что-то про него сказать полезен ли он вообще ?
>Что такое this.sum и зачем это использовать, почему нельзя просто создать другое поле класса и его использовать ?
Можно и нужно. В данном случае this нужно, чтобы не перепутать поле класса и формальный параметр. Такой нейминг - это нехорошо. Более того, если бы класс был статическим, это бы вообще не сработало, поскольку в таких классах отсутствует указатель this.

>Долго пытался понять зачем, как, почему, что ?
Просто сохраняется некая переменная для какого-то дальнейшего использования.
Дмитрий Бодров
Дмитрий Бодров
57 958
Жека >Долго пытался понять зачем, как, почему, что ?
Ответ немного не тот, зачем он это делает и что происходит ?
1.С начала
// Создаем переменную делегата
AccountHandler? taken;
2.// Регистрируем делегат
public void RegisterHandler(AccountHandler del)
{
taken = del;
}
3.// создаем банковский счет
Account account = new Account(200);
// Добавляем в делегат ссылку на метод PrintSimpleMessage
account.RegisterHandler(PrintSimpleMessage);
// Два раза подряд пытаемся снять деньги
account.Take(100);
account.Take(150);

void PrintSimpleMessage(string message) => Console.WriteLine(message);

Источник METANIT, 6 глава 2 подраздел
Делегат проще понять в контексте метода или функции. Если делегат это функция, тогда мы можем передать функцию как параметр в другую функцию. В данном случае в методе registrhandler просто передали функцию, метод или анонимную функцию.