委托delegate 泛型委托action<> 返回值泛型委托Func<> 匿名方法 lambda表达式 的理解

1.使用简单委托

namespace 简单委托
{
    class Program
    {
        //委托方法签名
        delegate void MyBookDel(int a);
        //定义委托
        static MyBookDel myBookDel;
        //普通方法
        public static void MathBook(int a)
        {
            Console.WriteLine("我是数学书" + a);
        }
        static void Main(string[] args)
        {
            myBookDel += MathBook;
            myBookDel(3);
            Console.ReadKey();
        }
    }
}

2.Action委托

/// <summary>
/// Action委托的优势是在于不用先去定义 方法签名 然后再用,可以直接使用
/// 他把他所支持的参数类型写在了<>里面,所以不需要单独去定义方法签名了
/// 不过Action不支持返回值
/// </summary>
namespace Action委托
{
    class Program
    {
        static Action<int> ac;
        public static void MathBook(int a)
        {
            Console.WriteLine("数学" + a);
        }
        static void Main(string[] args)
        {
            ac += MathBook;
            ac(6);
            Console.ReadKey();
        }
    }
}

3.Func委托

/// <summary>
/// Func委托几乎和Action一样,唯一的区别就是Func支持返回值
/// Func的<>里面的前面的是参数,最后一个值永远代表返回值的类型
/// </summary>
namespace Func委托
{
    class Program
    {
        static Func<int, string> func;
        public static string MyBook(int a)
        {
            return "哈哈哈" + a;
        }
        static void Main(string[] args)
        {
            func += MyBook;
            Console.WriteLine(func(1));
            Console.ReadKey();
        }
    }
}

4.匿名方法

/// <summary>
/// 匿名方法就是写委托时,不想再单独定义一个方法体,然后再进行+= 的一步操作,直接把方法体写在+= 的后面,这种方法就叫匿名方法
/// </summary>
namespace 匿名方法
{
    class Program
    {
        delegate int NiMingDel(int a, int b);
        static NiMingDel nimingDel;
        static void Main(string[] args)
        {
            nimingDel += delegate (int x, int y)  { return x + y; };
            //计算1 + 2
            Console.WriteLine(nimingDel(1, 2));
            Console.ReadKey();
        }
    }
}

5.lambda表达式

/// <summary>
/// 匿名方法用lambda表达式去代替
/// = (参数) => {方法体}
/// </summary>
namespace 合体
{
    class Program
    {
        delegate int NiMingDel(int a, int b);
        static NiMingDel nimingDel;
        static void Main(string[] args)
        {
            //一种语法糖
            nimingDel = (x, y) => x + y;
            //计算1 + 2
            Console.WriteLine(nimingDel(1, 2));
            Console.ReadKey();
        }
    }
}

6.合体

/// <summary>
/// Func<> 与 lambda表达式的合体
/// </summary>
namespace _6.合体
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int, int, string> func = (x, y) => { return "计算结果是:" + (x + y); };
            Console.WriteLine(func(1, 2));
            Console.WriteLine("c#牛逼!");
            Console.ReadKey();
        }
    }
}
时间: 2024-10-15 19:58:25

委托delegate 泛型委托action<> 返回值泛型委托Func<> 匿名方法 lambda表达式 的理解的相关文章

委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件

1. 委托 From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html 类是对象的抽象,而委托则可以看成是函数的抽象.一个委托代表了具有相同参数列表和返回值的所有函数. [csharp] view plaincopy class Program { delegate int CalculateDelegate(int a, int b); int add(int a, int b) { return a + b; } s

对比两个同类型的泛型集合并返回差异泛型集合 ——两个List&lt;类名&gt;的比较

1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam name="T">泛型类型</typeparam> 5: /// <param name="newModel">修改后的数据集合</param> 6: /// <param name="oldModel"&g

JsonResult作为Action返回值时的错误

JsonResult作为Action返回值时的错误 System.InvalidOperationException: This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to

委托 lambda表达式浅显理解

方法不能跟变量一样当参数传递,怎么办,C#定义了委托,就可以把方法当变量一样传递了,为了简单,匿名方法传递,省得再声明方法了:再简单,lambda表达式传递,比匿名方法更直观. public delegate int delegateArithmetic(int a, int b); //委托作为参数,方法传递给委托 public int result(int x,int y,delegateArithmetic delAri) { return delAri(x, y); } public i

返回值是JSON的阿贾克斯方法

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="

温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件

一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 public void HelloWorld() { Console.WriteLine("Hello World!"); } public void HelloWorld(string name) { Console.WriteLine("Hello ,{0}!", name); } 但是有些时候,我们希望把一

jquery中ajax如何返回值到上层函数的方法以及对于js处理json对象方法的记录

①在我们做前端js处理的时候我们经常会将一些公用的js方法封装起来,方便别的地方调用,但是我们要做的是需要将请求返回的值传递给调用者,这里我记录了在js中采用ajax方法获取后台数据并返回给调用者的方法,我们平时使用ajax的方法基本为如: <span style="font-family:FangSong_GB2312;font-size:18px;">function AutoGetOpenid(){ var personJson; $.ajax({ url : &qu

C#获取存储过程返回值和输出参数值的方法

//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @b //GO SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()); conn.Open(); SqlCommand MyCom

c# 多播委托的 异常处理 如果有返回值 只返回最后一个返回值

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Func<string> f0 = f1; f0 += f12; f0 += f2; f0 += f3