订阅者方法不需要创建委托实例?

时间:2011-02-25 07:51:23

标签: c# delegates

举办这样的活动:

class ABC
{
delegate bool X (int a);
event X eventX;
}

ABC.eventX+=someMethod; //works

我假设委托是由编译器隐式创建的?

2 个答案:

答案 0 :(得分:6)

是的,在.NET 2之前,您必须手动指定它:

ABC.eventX+=new X(someMethod);

但它现在使用以下语法隐式创建:

ABC.eventX+=someMethod;

答案 1 :(得分:0)

是的,它是自动创建的。

例如:


namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            (new Program()).Entrance();
        }

        public void Entrance()
        {
            ABC a = new ABC();
            a.eventX += callback;
        }

        protected bool callback(int a)
        {
            return true;
        }
    }

    class ABC
    {
        public delegate bool X(int a);
        public event X eventX;
    }
}

如果你在反射器中看到,那么Program类就是这个:


internal class Program
{
    // Methods
    protected bool callback(int a)
    {
        return true;
    }

    public void Entrance()
    {
        ABC a = new ABC();
        a.eventX += new ABC.X(this.callback);
    }

    private static void Main(string[] args)
    {
        new Program().Entrance();
    }
}