欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > C# .NET Framework的特殊委托

C# .NET Framework的特殊委托

2024/10/23 23:26:28 来源:https://blog.csdn.net/weixin_43284350/article/details/141033236  浏览:    关键词:C# .NET Framework的特殊委托

C# .NET Framework的特殊委托

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

Predicate<T>

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

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的对象。用于类型转换。

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的参数,并返回一个整数,表示它们的相对顺序。常用于排序操作。

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是其泛型形式。

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个参数。

using System;// 定义一个返回布尔值的委托,检查一个数字是否为偶数。
class Program
{static void Main(){Func<int, bool> isEven = number => number % 2 == 0;Console.WriteLine(isEven(10)); // 输出 TrueConsole.WriteLine(isEven(7));  // 输出 False}
}

EventHandler

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

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();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com