什么是匿名委托?

2020-03-24 14:34:07 浏览数 (1)

使用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
 
 
    }
}

总结大纲如下:其实,简写的写法就是采用了拉姆达表达式来写的;

反编译工具查看:

0 人点赞