C# - 委托的几种实例化方式 123

C# - 委托的几种实例化方式 123

编码文章call10242025-03-16 13:28:2023A+A-

#头条创作挑战赛#

委托实例化有4种方式,真正算起来就两种(有名与匿名)另外两种又是其变种,最终作用就是便于不同场景中的使用

方式1:通过new 创建委托实例,必须传入一个方法作为参数,否则会报错,因为委托内部的构造函数,需要传递一个方法作为参数

//传入符合委托返回类型和参数列表的方法 完成委托的实例化
ShowDelegate showDelegate = new ShowDelegate(M1);
showDelegate();

方式2:使用赋值的方式,这是C#2.0提供一个更简单的给委托创建实例的方式(赋值必须是符合委托返回类型和参数列表的方法

//C#中实例化委托的一个语法糖而已
ShowDelegate showDelegate =M2;
showDelegate();

委托实例化的语法糖

方式3:匿名委托,为委托赋值一个匿名方法(匿名只是相对而言,反编译查看编译器会自动添加一个编译器独有命名方式的方法名)匿名委托多用于:此方法只使用一次的,以后不再使用的场景中,益处是省的花心思去专门起一个方法名

//匿名委托的本质就是 赋值一个匿名方法
ShowDelegate showDelegate = delegate ()
{
     Console.WriteLine("匿名委托");
};
showDelegate();

匿名委托的本质

方式4:Lambda表达式(Linq编程,在数据库,集合等查询中使用非常方便,优点是可以大大减少编程的代码量),其实就是赋予了一个匿名方法(暂时了解)

class Program
{
    //delegate 后面跟 void 表示无返回值
    public delegate void ShowDelegate1();
    public delegate void ShowDelegate2(int num);
    //delegate 后面跟int,string等类型  表示有返回值
    public delegate int ShowDelegate3();
    public delegate int ShowDelegate4(int num);
    static void Main(string[] args)
    {
        //( )小括号中用于参数的传递
        //=>相当于 delegate
        //{ }大括号相当于匿名方法的方法体
        //匿名方法是否有返回值,全看委托的定义
        ShowDelegate1 showDelegate1 = () => { Console.WriteLine("Lambda表达式"); };
        ShowDelegate2 showDelegate2 = (x) => { x += 1; Console.WriteLine("Lambda表达式" + x); };
        ShowDelegate3 showDelegate3 = () => { Console.WriteLine("Lambda表达式"); return 6; };
        ShowDelegate4 showDelegate4 = (x) => { 
          x += 1; 
          Console.WriteLine("Lambda表达式" + x); 
          return ++x; };
        Console.ReadKey();
    }
}

Lambda表达式

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4