Class Just
{
public static int Res( ) { return 2; }
public static int Res3( ) { return 3; }
}
Class Program{
private delegate int Res();
Res res = Just.Res;
res += Just.Res3;
res += Just.Res;
Console.WriteLine(res()); //最后的返回值是2
调用带引用参数的委托
如果委托由引用参数,参数值会根据调用列表中的一个或多个方法的返回值而改变
Class Just{
public static void Add2(ref int x) { x += 2; }
public static void Add3(ref int x) { x += 3; }
}
Class Program{
AddSom add = Just.Add2;
add += Just.Add3;
add += Just.Add2;
int x = 5;
add(ref x);
Console.WriteLine(x);}
把委托变量当参数赋值给方法
private delegate void Prints ();
static voidMain(string[] args){
Prints s = Method1;
s += Method2;
Printstr(s);
}
static void Printstr(Prints s)
{
s();
}
static void Method1() { Console.WriteLine("我是方法1"); }
static void Method2() { Console.WriteLine("我是方法2"); }
取得多播委托中的所有方法
static void Main(string[] args)
{
Action a = Test1;
a += Test2;
Delegate[] d = a.GetInvocationList();
for (int i = 0; i < d.Length; i++)
{
d[i].DynamicInvoke();
}
Console.ReadKey();
}
static void Test1() { Console.WriteLine("test1"); }
static void Test2() { Console.WriteLine("test2"); }
匿名方法与委托
Func<int, int, int> plus = delegate (int arg1, int arg2)
{
return arg1 + arg2;
}; //注意分号