Both of the following work fine:
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();
};
}
But not the following:
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
}
If I can assign an anonymous method directly (which is a delegate), why not a delegate variable? I am just trying to understand the difference between all the three methods and why I cannot write the third.
You don’t need to define this delegate:
You could simply use an already defined delegate (
ListChangedEventHandler) fromSystem.ComponentModelnamesapce:ListChangedevent is of typeListChangedEventHandler. So you cannot expect it to accept an event handler of another type. The following line is wrong because in your code,lstchangedis of your own delegate type (ListChanged) while it must me of typeListChangedEventHandler.For more info you can read this article.