以下两种方法都可以正常工作:
BindingList<Employee> lstEmployees = new BindingList<Employee>();
//delegate pointing to an anonymous method
//----------------------------------------
delegate void ListChanged(object lst, ListChangedEventArgs args);
private void Form1_Load(object sender, EventArgs e)
{
listBox1.ValueMember = "Empno";
listBox1.DisplayMember = "Ename";
listBox1.DataSource = lstEmployees;
ListChanged lstchanged = delegate(object lst, ListChangedEventArgs args)
{
lblEmpCount.Text = lstEmployees.Count.ToString();
};
lstEmployees.ListChanged += new ListChangedEventHandler(lstchanged);
}
//Anonymous method (with params)
//-----------------------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
listBox1.ValueMember = "Empno";
listBox1.DisplayMember = "Ename";
listBox1.DataSource = lstEmployees;
lstEmployees.ListChanged += delegate(object lst, ListChangedEventArgs args)
{
lblEmpCount.Text = lstEmployees.Count.ToString();
};
}但不包括以下内容:
delegate void ListChanged(object lst, ListChangedEventArgs args);
private void Form1_Load(object sender, EventArgs e)
{
listBox1.ValueMember = "Empno";
listBox1.DisplayMember = "Ename";
listBox1.DataSource = lstEmployees;
ListChanged lstchanged = delegate(object lst, ListChangedEventArgs args)
{
lblEmpCount.Text = lstEmployees.Count.ToString();
};
lstEmployees.ListChanged += lstchanged; //error here
}如果我可以直接分配一个匿名方法(这是一个委托),为什么不能指定一个委托变量呢?我只是试图理解这三种方法之间的区别,以及为什么我不能编写第三种方法。
发布于 2012-03-17 12:15:52
您不需要定义此委托:
delegate void ListChanged(object lst, ListChangedEventArgs args);您可以简单地使用System.ComponentModel命名空间中已经定义的委托(ListChangedEventHandler):
ListChangedEventHandler lstchanged = delegate(object lst, ListChangedEventArgs args)
{
lblEmpCount.Text = lstEmployees.Count.ToString();
};
lstEmployees.ListChanged += lstchanged; // no errorListChanged事件的类型为ListChangedEventHandler。因此,您不能期望它接受其他类型的事件处理程序。下面这一行是错误的,因为在您的代码中,lstchanged是您自己的委托类型(ListChanged),而它必须是ListChangedEventHandler类型。
lstEmployees.ListChanged += lstchanged; //error here有关更多信息,请阅读this article。
https://stackoverflow.com/questions/9746150
复制相似问题