委托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();
        }
    }
}
复制代码

 

posted @   三页菌  阅读(608)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示