我有下面的代码声明了一个委托:
delegate void EmployeeSalaryCalculated(int idEmp);
我有这些简单的类:
class Employee
{
public void CalculateSalary(int idEmp){}
}
class Payroll
{
public void EmpSalNotification(int idEmp) { }
public void SetMethod(ref EmployeeSalaryCalculated esc)
{
esc += this.EmpSalNotification;
}
}
class HR
{
public void EmpSalNotification(int idEmp) { }
public void SetMethod(ref EmployeeSalaryCalculated esc)
{
esc = this.EmpSalNotification;
}
}
下面的按钮处理程序利用了上面的类:
private void btnStart_Click(object sender, EventArgs e)
{
Payroll payroll = new Payroll();
HR hr = new HR();
EmployeeSalaryCalculated empSalCalculated = null;
empSalCalculated += payroll.EmpSalNotification;
empSalCalculated += hr.EmpSalNotification;
// This invokes both methods - fine.
// empSalCalculated.GetInvocationList() returns 2
empSalCalculated.Invoke(108);
EmployeeSalaryCalculated empSalCalculated2 = null;
payroll.SetMethod(ref empSalCalculated2);
hr.SetMethod(ref empSalCalculated2);
// This however, invokes only one method!
// empSalCalculated2.GetInvocationList() returns 1
empSalCalculated2.Invoke(108);
}
尽管通过empSalCalculated2
ref 传递委托对象,但它只执行一个函数,这与empSalCalculated
执行两个函数的委托对象不同。
有什么想法吗?