c#入门-匿名函数,多播委托

匿名函数

如果一个函数的参数是一个委托类型。而你此刻没有合适的方法组使用,也不想为他专门声明一个局部函数。
则可以使用匿名函数。匿名函数的创建更为简单,语法为:返回类型 + 参数列表+ => +函数主体

Func<int, string> func = string (int i) =>
{ 
	return i.ToString();
};

如果参数列表有且仅有1个参数,则可以省略参数的括号。函数主体可以使用表达式语法(如果只有一句话)。
如果参数或返回值的类型是确定的,比如已知被赋值的变量类型,那么可以省略类型。

Fun(i => i.ToString());

void Fun(Func<int, string> func)
{
	Console.WriteLine(func);
}

匿名函数每次手写都会创建一个新的。而多播委托必须要原值才能解绑。
也就是说多播委托无法使用匿名函数进行解绑。

Func<int, string> func = i => i.ToString();
func -= i => i.ToString();//无事发生

多播委托

委托作为变量,也可以+=和-=。委托可以和方法组相加,但方法组和方法组不能相加。
储存多个函数时,调用委托会按照加的顺序依次执行。但返回值只使用最后绑定的函数
使用 – =时,如果储存了这个值,那么会移除第一个。如果没有则无事发生。
c#入门-匿名函数,多播委托_第1张图片
委托是引用类型,默认值是null。委托可以和null相加,不会出现异常。
但调用null委托会发生异常。调用委托时为了保险期间,应使用Invoke方法使用委托并配合空合并运算。

Func<int, int> fun1 = Square;
fun1?.Invoke(10);

int Square(int i)
{
	return i * i;
}

int Cube(int i)
{
	return i * i * i;
}

你可能感兴趣的:(#,进阶部分,c#)