100。C委托进阶
摘要
委托的动态添加与移除,委托返回值,匿名委托。
正文
委托的动态添加与移除
通过+=增加方法,-=移除方法
delegate int MyDel(int x,int y);int Add(int x,int y) { return x + y; } int Minus(int x,int y) { return x - y; } private void btnShow_Click(object sender, EventArgs e) { MyDel del1 = new MyDel(Add); del1 += new MyDel(Minus); del1 -= new MyDel(Minus); int x = del1(2, 3); MessageBox.Show(x.ToString()); }
调用带返回值的委托
如果委托有返回值并且在调用列表中有一个以上的方法,会发生下面的情况。调用列表中最后一个方法返回的值就是委托调用返回的值。调用列表中所有其他方法的返回值都会被忽略。 delegate int MyDel(int x);int sum = 5; int Add(int x) { sum += x; return sum; } int Minus(int x) { sum -= x; return sum; } private void btnShow_Click(object sender, EventArgs e) { MyDel del1 = new MyDel(Add); del1 += new MyDel(Minus); del1(2); MessageBox.Show(sum.ToString()); }
匿名方法
如果方法只会使用一次,我们用匿名方法就方便多了
delegate int MyDel(int x);private void btnShow_Click(object sender, EventArgs e) { MyDel del = delegate (int x) { return x + 20; }; MessageBox.Show(del(10).ToString()); }
Lambda表达式
删除delegate关键字;
在参数列表和匿名方法主体之间放Lambdai运算符=>。Lambdai运算符读作"goes to"。private void btnShow_Click(object sender, EventArgs e) { MyDel del1 = (x) => { return x + 10; }; MessageBox.Show(del1(10).ToString()); }