C#-匿名委托
与匿名方法一样,我使用“delegate”关键字声明的委托也是匿名委托C#-匿名委托,c#,delegates,C#,Delegates,与匿名方法一样,我使用“delegate”关键字声明的委托也是匿名委托 namespace Test { public delegate void MyDelegate(); class Program { static void Main(string[] args) { DelegateTest tst = new DelegateTest(); tst.Chaining();
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();
}
}
}
是的,他们是匿名代表(或者更具体地说是匿名代表)。是的。匿名委托不能通过名称直接引用,因此使用
delegate(){}
语法意味着它们是匿名的。示例中的委托集合指向许多匿名方法。委托“只是一个方法指针”。它指向的是真实方法还是匿名方法并不重要
请参见他们是匿名方法的代理。这是一种创建匿名方法的方法,该方法自.NET2.0以来一直可用。在.NET3.0中,您还可以使用更简单的lambda表达式(但编译为相同的代码)。我想这就是你所说的“匿名方法”。但实际上,它们是一回事。没错,您为一个事件分配了许多匿名方法 如果您使用的是较新版本的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();
}
}
没有所谓的“匿名委托”(或者更确切地说,这不是C#规范或我所知道的任何其他与.NET相关的规范中公认的术语) 匿名函数包括匿名方法和lambda表达式
您的代码显示了普通的老式匿名方法—尽管它们使用的是lambda表达式所不具备的一个功能:当您不关心参数时,完全不表达参数。您的委托不是匿名的。它叫MyDelegate。 CLR中的Delegate是一个从System.MulticastDelegate派生的类,在您的示例中称为MyDelegate。 您不能直接从MulticastDelegate派生,C#编译器将阻止您
在代码中,当您将委托分配给del时,编译器会推断委托的类型/名称,因为您将del声明为MyDelegate类型的事件。Lambda语法中的Lambda表达式和匿名方法实际上并不相同。如果使用带有大括号的lambda语法:(x)=>{y();}um,则您的语句为true。你能澄清一下吗。。我们通常看到“匿名委托”一词在每个地方都被使用,还有MSDN中使用的“匿名方法”,所以我们说前者或两者都正确是错误的。@Shekhar_Pro:“匿名方法”是正确的。“匿名代表”不正确。你说你“经常在任何地方看到它”——你能列举具体的地方吗?不是在任何官方文件中,而是网民常用的术语。喜欢所以它本身。。。。看来我们已经养成了使用错误术语的习惯。@Shekhar_Pro:是的,有很多术语被错误使用:(Thanx用于澄清…(看起来我在下一篇博文中有东西要写):)链接已经死了,但很可能会导致这样的情况: