У меня есть вопрос о событиях и делегатах в C #. Я видел во многих кодах, что они использовали event
а также delegate
Ключевое слово для создания триггера события. Давайте пропустим это сейчас, и меня больше всего волновали функции, которые вызвали событие, или, скорее, функции, которые были вызваны здесь, это фрагмент области действия.
public delegate void EventHandler();
class Program
{
//Note : Assigning the evet to the delegate
public static event EventHandler _show;
static void Main(string[] args)
{
_show += new EventHandler(Dog);
_show += new EventHandler(Cat);
_show.Invoke();
}
static void Dog() {
Console.WriteLine("Doggie");
}
static void Cat(){
Console.WriteLine("Pussy");
}
}
`
Как вы можете видеть, есть несколько функций, которые называются Dog / Cat. Там возвращаются типы void
но когда вы выполняете это выглядит как string
значение возвращается событию _show
, Может кто-нибудь объяснить, что здесь происходит?
Вы неправильно интерпретируете синтаксис.
static void Main(string[] args)
{
_show += new EventHandler(Dog);
_show += new EventHandler(Cat);
_show.Invoke();
}
_show += new EventHandler(Dog)
просто поставит в очередь вызов функции Dog()
, Таким образом, все равно что удерживать все вызовы функций в очереди, а затем выполнять их в порядке FIFO.
Вы ничего не возвращаете сюда. Только все ваши функции вызываются последовательно, а затем значения печатаются.
show
Событие просто запустить Dog
а потом беги Cat
Методы. Очевидно, на нем будут печататься «Песик» и «Киска».
Если вы хотите вернуть строку:
static string Dog() {
// Console.WriteLine("Doggie");
return "Doggie";
}
и изменить delegate
decalre:
public delegate string EventHandler();