ITPub博客

首页 > 数据库 > 数据库开发技术 > C# 实例详解委托之Func、Action、delegate

C# 实例详解委托之Func、Action、delegate

原创 数据库开发技术 作者:后端Q 时间:2024-04-22 00:00:00 0 删除 编辑

在C#中,委托(delegate)是一种引用类型,它定义了方法的签名(参数和返回值类型)并允许将方法作为参数传递或赋值给变量。Func、Action和自定义delegate是C#中处理委托的三种主要方式。

1. Func 委托

Func委托是一种泛型委托,用于封装返回类型不为空(非void)的方法。它有多个重载,可以接受0到16个输入参数,并返回一个结果。

示例代码:

using System;

class Program
{
    static void Main()
    {
        // 定义一个Func委托,接受两个int参数,返回一个int结果
        Func<int, int, int> add = (a, b) => a + b;
        
        int result = add(5, 10); // 调用委托,执行加法操作
        Console.WriteLine("结果是: " + result); // 输出:结果是: 15
    }
}

2. Action 委托

与Func类似,Action也是一种泛型委托,但它用于封装没有返回值(void)的方法。Action也有多个重载,可以接受0到16个输入参数。

示例代码:

using System;

class Program
{
    static void Main()
    {
        // 定义一个Action委托,接受两个string参数,不返回结果
        Action<string, string> greet = (name, greeting) => 
        {
            Console.WriteLine($"{greeting}, {name}!");
        };
        
        greet("Alice", "Hello"); // 调用委托,输出问候语
        // 输出:Hello, Alice!
    }
}

3. 自定义 delegate

除了使用内置的Func和Action委托外,C#还允许开发者定义自己的委托类型。这通常在需要特定方法签名的情况下使用,而这些方法签名不符合Func或Action的预定义签名。

示例代码:

using System;

// 定义一个自定义委托,接受一个int参数并返回void
delegate void MyCustomDelegate(int value);

class Program
{
    static void Main()
    {
        // 创建MyCustomDelegate的实例,并指向一个静态方法
        MyCustomDelegate myDelegate = PrintNumber;
        
        myDelegate(42); // 调用委托,执行PrintNumber方法并打印数字42
        // 输出:The number is: 42
    }
    
    // 静态方法,与MyCustomDelegate有相同的签名
    static void PrintNumber(int number)
    {
        Console.WriteLine("The number is: " + number);
    }
}

总结与比较

  • Func委托用于封装有返回值的方法,适合执行计算或处理并需要结果的操作。
  • Action委托用于封装没有返回值的方法,通常用于执行某些操作,如打印日志、修改状态等。
  • 自定义delegate提供了更大的灵活性,允许开发者定义与特定方法签名完全匹配的类型。这在某些复杂的应用场景中可能非常有用,特别是当内置委托类型不满足需求时。

在实际开发中,应根据具体需求选择合适的委托类型。对于简单的操作,Func和Action通常足够使用,而对于特殊的方法签名或需要更明确类型名的情况,则可以使用自定义delegate。


原文作者:后端Q;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    727200