0
以下兩個做工精細:爲什麼我不能分配一個委託變量來註冊一個事件處理程序?
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
}
如果我可以直接給一個匿名方法(這是一個代表),爲什麼不委託變量?我只是想了解所有這三種方法之間的區別,以及爲什麼我不能寫出第三種方法。