[英]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.