使用Delegate的时候很多时候没必要使用一个普通的方法(比如说上一篇文章中说的用Test()方法来传进去 定义的委托名字Mydelegate ),因为这个方法只有这个Delegate会用,并且只用一次,这时候使用匿名方法最合适。
匿名方法就是没有名字的方法。
3就是没有名字的int对象。3 5就是两个匿名int对象的相加,允许匿名对象,就允许匿名方法。
代码语言:javascript复制MyDelegate p = delegate(string s)
{
Console.WriteLine(s);
};
知道C#中有匿名方法,看到这种写法知道是匿名函数即可。
匿名方法与lambda表达式最终编译为一个方法。
解释一下:这里用delegate 关键字 就是替代了 方法Say(),只有这个MyDelegate会用,并且只用一次
代码语言:javascript复制using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 匿名委托
{
class Program
{
#region 没有参数的匿名委托(1)
//public delegate void MyDelegate();
//static void Main(string[] args)
//{
// MyDelegate mdl = delegate() { Console.WriteLine("我很帅!"); };
// mdl();//调用方法
// Console.ReadKey();
//}
//public static void Say()
//{
// Console.WriteLine("wo hen piao liang !");
//}
#endregion
#region 有参数的匿名委托
//public delegate void MyDelegate(int num1);
//static void Main(string[] args)
//{
// MyDelegate mdl = delegate(int n) { Console.WriteLine(n 100); };
// mdl(121);//理解:mdl其实就是声明出来的一个方法
//}
#endregion
#region 没有参数的简写的匿名委托写法(1)<简写>
//public delegate void MyDelegate();
//static void Main(string[] args)
//{
// MyDelegate mdl = () => { Console.WriteLine( "简写的无参数的匿名委托写法") ;};
// mdl();
// Console.ReadKey();
//}
#endregion
#region 有参数的匿名委托<简写>
//public delegate int MyDelegate(int n1,int n2);
//static void Main(string[] args)
//{
// // 这里的 =([参数,参数])=>{ };就是拉姆达表达式写法,写法简单,但是以后会经常的使用!!
// MyDelegate mdl = (num1, num2) => { return num1 num2; };//这里的mdl看作是一个声明出来的一个方法
// int result=mdl(100,200);//调用方法,并传进参数
// Console.WriteLine(result);
// Console.ReadKey();
//}
#endregion
#region 有参数的匿名委托<简写>---应用举例说明
public delegate string MyDelegate(string name);
static void Main(string[] args)
{
// 这里的 =([参数,参数])=>{ };就是拉姆达表达式写法,写法简单,但是以后会经常的使用!!
MyDelegate mdl = (XXX) => { return XXX "你真帅!"; };//这里的mdl看作是一个声明出来的一个方法
string result = mdl("小明");//调用方法,并传进参数
Console.WriteLine(result);
Console.ReadKey();
}
#endregion
}
}
总结大纲如下:其实,简写的写法就是采用了拉姆达表达式来写的;
反编译工具查看: