簡體   English   中英

委托和事件:C#

[英]Delegate and Event : C#

我有一個關於 C# 中的事件和委托的問題。 我在許多代碼中看到他們使用eventdelegate關鍵字來創建事件觸發器。 讓我們暫時跳過它,我最關心的是事件觸發的函數,或者更確切地說,這里調用的函數是作用域片段。

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()的函數調用_show += new EventHandler(Dog)隊列。 所以它就像將所有函數調用保存在一個隊列中,然后以 FIFO 順序執行它們。

你不會在這里返回任何東西。 只有您的所有函數都被順序調用,然后值被打印出來。

show Event 只運行Dog ,然后運行Cat方法。 顯然,它會打印“Doggie”和“Pussy”。

如果你想返回一個字符串:

static string Dog() {
       // Console.WriteLine("Doggie");
       return "Doggie";
}

並更改delegate貼花:

public delegate string EventHandler();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM