簡體   English   中英

C# - 匿名代表

[英]C# - Anonymous delegate

像匿名方法一樣,我宣布使用“delegate”關鍵字的代表是匿名代表嗎?

namespace Test
{
    public delegate void MyDelegate();
    class Program
    {
        static void Main(string[] args)
        {
            DelegateTest tst = new DelegateTest();
            tst.Chaining();
            Console.ReadKey(true);
        }
    }

    class DelegateTest
    {
        public event MyDelegate del;

        public void Chaining()
        {
            del += delegate { Console.WriteLine("Hello World"); };
            del += delegate { Console.WriteLine("Good Things"); };
            del += delegate { Console.WriteLine("Wonderful World"); };
            del();
        }
    }
}

沒有“匿名委托”這樣的東西(或者更確切地說,這不是C#規范中的公認術語,或者我所知道的任何其他與.NET相關的規范)。

有一些匿名函數,包括匿名方法和lambda表達式。

你的代碼顯示了普通的舊匿名方法-雖然他們使用的一個功能lambda表達式沒有:不表達的參數在所有當你不關心他們的能力。

示例中的委托集合指向了許多匿名方法。 委托是“只是方法指針”。 如果它指向真實方法或匿名方法並不重要。

請參閱http://msdn.microsoft.com/en-us/library/0yw3tz5k(VS.80).aspx

這是正確的,您已為事件分配了許多匿名方法。

如果你使用的是較新版本的c#,你也可以使用lambdas做類似的事情。 例如:

class DelegateTest
{
    public event Action del;

    public void Chaining()
    {
        del += () => Console.WriteLine("Hello World");
        del += () => Console.WriteLine("Good Things");
        del += () => Console.WriteLine("Wonderful World");
        del();
    }
}

是的,他們是匿名代表(或者更具體地說, 代理人調用匿名方法 )。

是。 匿名委托不能直接通過名稱引用,因此使用delegate(){}語法意味着它們是匿名的。

您的代表不是匿名的。 它被稱為MyDelegate。 CLR中的委托是一個派生自System.MulticastDelegate的類,在您的情況下,它稱為MyDelegate。 你無法直接從MulticastDelegate派生,C#編譯器會阻止你。

在將代理分配給del的代碼中,代理的類型/名稱由編譯器推斷,因為您將del聲明為MyDelegate類型的事件。

他們是匿名方法的代表。 這是制作匿名方法的一種方法,自.NET 2.0以來就可以使用。 使用.NET 3.0,您還可以使用更簡單的lambda表達式(但編譯為相同的代碼)。 我想這就是你用“anonymouse方法”的意思。 但實際上,它們是同一個東西。

暫無
暫無

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

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