C# .NET Framework的特殊委托

C# .NET Framework的特殊委托

.NET Framework中定义了几种特殊的委托类型,以简化委托的使用。以下是一些常用的特殊委托类型:

Predicate<T>

这是一个返回布尔值的委托,接受一个类型为T的参数。常用于定义过滤条件。

c# 复制代码
using System;
using System.Collections.Generic;

// 测试一个整数列表,找出所有大于10的整数。
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 12, 3, 45, 6, 78 };
        Predicate<int> isGreaterThan10 = x => x > 10;

        foreach (var number in numbers.FindAll(isGreaterThan10))
        {
            Console.WriteLine(number);
        }
    }
}

Converter<TInput, TResult>

接受一个类型为TInput的参数,并返回一个类型为TResult的对象。用于类型转换。

c# 复制代码
using System;

// 将字符串数组转换为整数数组。
class Program
{
    static void Main()
    {
        string[] strings = { "1", "2", "3" };
        Converter<string, int> stringToInt = s => int.Parse(s);

        int[] integers = Array.ConvertAll(strings, stringToInt);
        Console.WriteLine(string.Join(", ", integers));
    }
}

Comparison<T>

接受两个类型为T的参数,并返回一个整数,表示它们的相对顺序。常用于排序操作。

c# 复制代码
using System;

class Program
{
    static void Main()
    {
        int[] numbers = { 3, 1, 4, 1, 5 };
        Comparison<int> comparer = (x, y) => x.CompareTo(y);

        Array.Sort(numbers, comparer);
        Console.WriteLine(string.Join(", ", numbers));
    }
}

Action

一个无返回值的委托,可以接受从0到16个参数。Action是其泛型形式。

c# 复制代码
using System;

// 定义一个无参数无返回值的委托,用于打印消息。
class Program
{
    static void PrintMessage()
    {
        Console.WriteLine("Hello, World!");
    }

    static void Main()
    {
        Action printAction = PrintMessage;
        printAction();
    }
}

Func<TResult>

一个有返回值的委托,返回类型为TResult,无参数。Func<T1, T2, ..., TResult>是其泛型形式,可以接受从1到16个参数。

c# 复制代码
using System;

// 定义一个返回布尔值的委托,检查一个数字是否为偶数。
class Program
{
    static void Main()
    {
        Func<int, bool> isEven = number => number % 2 == 0;

        Console.WriteLine(isEven(10)); // 输出 True
        Console.WriteLine(isEven(7));  // 输出 False
    }
}

EventHandler

专门用于事件处理的标准委托类型,接受一个Object类型的sender和EventArgs或其派生类型e作为参数。

c# 复制代码
using System;

// 使用 EventHandler 来定义一个事件处理程序,响应按钮点击事件。
class Program
{
    public event EventHandler ButtonClicked;

    protected virtual void OnButtonClicked(EventArgs e)
    {
        ButtonClicked?.Invoke(this, e);
    }

    public void SimulateButtonClick()
    {
        OnButtonClicked(EventArgs.Empty);
    }
}

class Test
{
    static void Main(string[] args)
    {
        Program p = new Program();
        p.ButtonClicked += (sender, e) =>
        {
            Console.WriteLine("Button was clicked.");
        };
        p.SimulateButtonClick();
    }
}
相关推荐
m0_570466418 分钟前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
程序喵大人9 分钟前
分享个C++线程池的实现源码
开发语言·c++·线程池
不会吃萝卜的兔子33 分钟前
go webrtc - 1 go基本概念
开发语言·golang·webrtc
要做朋鱼燕1 小时前
【C++】 priority_queue 容器模拟实现解析
开发语言·c++·笔记·职场和发展
jiaway1 小时前
【C语言】第四课 指针与内存管理
c语言·开发语言·算法
励志不掉头发的内向程序员1 小时前
C++进阶——继承 (1)
开发语言·c++·学习
中国胖子风清扬3 小时前
Rust 序列化技术全解析:从基础到实战
开发语言·c++·spring boot·vscode·后端·中间件·rust
我就是全世界3 小时前
【存储选型终极指南】RustFS vs MinIO:5大维度深度对决,95%技术团队的选择秘密!
开发语言·分布式·rust·存储
_oP_i3 小时前
WinForms 项目里生成时选择“首选目标平台 32 位导致有些电脑在获取office word对象时获取不到
c#·office
CodeCraft Studio3 小时前
Aspose.Words for .NET 25.7:支持自建大语言模型(LLM),实现更安全灵活的AI文档处理功能
人工智能·ai·语言模型·llm·.net·智能文档处理·aspose.word