看到一个程序的源代码        private static DownloadForm instace;
        public static DownloadForm Instance
        {
            get
            {
                if (instace == null)
                {
                    instace = new DownloadForm();
                    instace.Disposed +=
                        delegate
                        {
                            instace = null;
                        };
                }
                return instace;
            }
        }想问一下这里的delegate那句话是什么意思?是什么用法?谢谢

解决方案 »

  1.   

    匿名委托,如果instace == null,就new 一个DownloadForm ,并在它的Disposed事件中添加委托,也就是"instace = null;"
    代码
      

  2.   


    instace.Disposed +=
                            delegate
                            {
                                instace = null;
                            };匿名委托事实上,instance的Disposed事件的订阅函数必须是一个没有返回值、有两个参数(第一个是object类型,第二个是EventArgs类型)的函数,在匿名委托出现以前,你不得不这样写:instance.Disposed += new EventHandler(func);
    void func(object sender, System.EventArgs e)
    {
        instance = null;
    }
    为了简化代码,C# 2.0引入匿名方法,即在需要订阅事件的时候,你可以不需要为这个特有的事件处理方法取个名字,直接使用匿名方法即可,也就是类似于下面的写法:instance.Disposed += delegate (object sender, System.EventArgs e) { instance = null; }
    再进一步,使用匿名委托,你甚至不需要给出方法的参数列表:instance.Disposed += delegate { instance = null; }
    最后,Lambda表达式:instance.Disposed += (sender, e) => instance = null;