簡體   English   中英

在C#中使用委托的兩種方式(使用new關鍵字和不使用new關鍵字)有什么區別

[英]What is the difference between two ways of using delegates in C# (with new keyword and without)

我想知道有兩種在C#中使用委托的方式,帶有“ new”關鍵字,而沒有:

delegate void D(string value);    
static void Main()
{
    D d1 = new D(v => Console.WriteLine(v));  // 1
    D d2 =       v => Console.WriteLine(v);   // 2
    d1.Invoke("cat");
    d2.Invoke("cat");
    Console.ReadLine();
}

有什么區別嗎?

PS我注意到Visual Studio表單設計器使用“ new”關鍵字(用於事件)生成代碼,但是當我將其刪除(從生成的代碼中)時,它可以工作:

        this.button1.Click += new System.EventHandler(this.button1_Click);
        this.button1.Click += this.button1_Click;

有什么區別嗎?

不會。兩種形式都編譯為完全相同的IL。

PS我注意到Visual Studio表單設計器會生成帶有“ new”關鍵字的代碼(用於事件)

在舊版本的C#中,需要顯式實例化委托。 C#2添加了委托推斷 ,它允許您直接將方法組分配給委托(或與事件一起使用)。 設計人員仍然選擇原始形式,這是C#2.0之前所必需的,但仍然有效。

暫無
暫無

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

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