看到一个程序的源代码 private static DownloadForm instace;
public static DownloadForm Instance
{
get
{
if (instace == null)
{
instace = new DownloadForm();
instace.Disposed +=
delegate
{
instace = null;
};
}
return instace;
}
}想问一下这里的delegate那句话是什么意思?是什么用法?谢谢
public static DownloadForm Instance
{
get
{
if (instace == null)
{
instace = new DownloadForm();
instace.Disposed +=
delegate
{
instace = null;
};
}
return instace;
}
}想问一下这里的delegate那句话是什么意思?是什么用法?谢谢
解决方案 »
- DataBase.config文件路径,在线等
- svn问题
- C# 新手求教各位大虾
- 有关ReportView的问题(怎样把查询条件写在Expression里面)
- 请问如何用C#实现打字功能?
- 【求助】socket变成出现【由于目标机器积极拒绝,无法连接。 192.168.2.138:1111】
- 读取指定文件内的文本文件然后写入数据库
- 连接虚拟机中sql用ip连得上,用计算机名连不上
- 求将word文档存入数据库和从数据库取出来显示的方案???
- What kind of training classes do you want?
- <o:p></o:p> 的正则表达式怎么写
- private datarow dr;
代码
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;