C#-匿名委托

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();

与匿名方法一样,我使用“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();
        }
    }
}

是的,他们是匿名代表(或者更具体地说是匿名代表)。

是的。匿名委托不能通过名称直接引用,因此使用
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用于澄清…(看起来我在下一篇博文中有东西要写):)链接已经死了,但很可能会导致这样的情况: