Я понимаю, как работают делегаты и события. Я также могу представить некоторые общие сценарии, в которых мы должны внедрять события, но Im с более сложным пониманием, в каких ситуациях должны использоваться делегаты.
спасибо
ОТВЕТ НА ПОЛЬЗОВАТЕЛЮ KVB POST:
а)
В основном вы можете использовать делегаты, где бы вы ни использовали интерфейс с одним методом.
Думаю, я несколько понимаю следующее:
-
Класс C может определить метод C.M, который в качестве аргумента примет интерфейс IM. Этот интерфейс будет определять метод IM.A, и поэтому любому, кто хочет вызвать C.M, потребуется реализовать этот интерфейс.
-
В качестве альтернативы метод CM может принимать (вместо интерфейса IM) в качестве аргумента делегат D с той же сигнатурой как метод IM.A.
Но я не понимаю, почему Cant CM также использует в качестве параметра делегат D, даже если наш интерфейс IM определяет несколько других методов кроме того метод A? Таким образом, другие методы класса C могут потребовать в качестве аргумента интерфейса IM, но CM может потребоваться делегат D (при условии, что CM нужно только вызвать метод A, а не любой другой метод, определенный в IM)?
b)
var list = new List<int>(new[] { 1, 2, 3 });
var item = list.Find(i => i % 2 == 0);
-
Является ли приведенный выше код примером того, что пользователь вызывает jpbochi (см. ее/его сообщение в этой теме) инъекции зависимостей?
-
Я предполагаю, что указанный выше код не может быть реализован с использованием событий вместо "чистых" делегатов?