myDel delVar;
delVar = new myDel(Elx.StandAndUp);
注意:
方法具有和委托相匹配的返回类型和签名。
快捷语法:
delVar = Elx.StandAndUp;
Elx.StandAndUp 不再被变量delVal引用。它会被垃圾回收器回收。
delVal引用新方法,TNT.Bang。
在实用+=运算符时,实际上是创建一个新委托,调用列表为左边的委托加上右边的委托,赋值给变量delVal.
实用参数调用委托就会实用相同的参数值(例如55),调用列表里的每一个成员。
-
delegate void myDel(int x);
-
class Elx
-
{
-
public static void StandAndUp(int xI)
-
{
-
Console.WriteLine("{0}让我我坐着又起来", xI);
-
}
-
}
-
class TNT
-
{
-
public static void Bang(int xI)
-
{
-
Console.WriteLine("{0}炸弹爆炸", xI);
-
}
-
}
-
class Program
-
{
-
static void Main(string[] args)
-
{
-
myDel delVar;
-
delVar = new myDel(Elx.StandAndUp);
-
delVar = Elx.StandAndUp;
-
delVar += TNT.Bang;
-
delVar(55);
-
}
-
}
delVar(55);
△调用列表中最后一个方法返回的值就是委托调用返回的值。
△调用列表中所有其他方法的返回值都会被忽略。
-
using System;
-
namespace Examples
-
{
-
delegate int MyDel(); // Declare method with return value.
-
class MyClass
-
{
-
int IntValue = 5;
-
public int Add2() { IntValue += 2; return IntValue; }
-
public int Add3() { IntValue += 3; return IntValue; }
-
}
-
class Program
-
{
-
static void Main()
-
{
-
MyClass mc = new MyClass();
-
MyDel mDel = mc.Add2; // Create and initialize the delegate.
-
mDel += mc.Add3; // Add a method.
-
mDel += mc.Add2; // Add a method.
-
Console.WriteLine("Value: {0}", mDel());
-
}
-
}
-
}
delegate(int x)
{
return x+20;
}
关键字 参数列表 语句块
delegate ( Paranmenter ) { ImplementationCode }
删除delegate方法
在参数列表和匿名方法主体之间放入=>。
MyDel del = delegate( int x ) { return x+20 }; //匿名方法
MyDel del = ( int x ) => { return x+20 }; //Lambda表达式
-
delegate double MyDel(int par);
-
class Program
-
{
-
static void Main()
-
{
-
MyDel del = delegate(int x) { return x + 1; }; // Anonymous method
-
MyDel le1 = (int x) => { return x + 1; }; // Lambda expression
-
MyDel le2 = (x) => { return x + 1; };
-
MyDel le3 = x => { return x + 1; };
-
MyDel le4 = x => x + 1;
-
Console.WriteLine("{0}", del(12));
-
Console.WriteLine("{0}", le1(12));
-
Console.WriteLine("{0}", le2(12));
-
Console.WriteLine("{0}", le3(12));
-
Console.WriteLine("{0}", le4(12));
-
}
-
}
下面le1~le4都是相等的。
MyDel le1 = (int x) => { return x + 1; }; // Lambda expression
MyDel le2 = (x) => { return x + 1; };
MyDel le3 = x => { return x + 1; };
MyDel le4 = x => x + 1;