下面是对泛型委托在C#中的详细讲解及示例说明:
泛型委托的概念
泛型委托(Generic Delegate)是一个带有泛型参数的委托,具有良好的扩展性和通用性,可以适配各种需求,使代码更加简洁、灵活。在泛型委托的定义中,可以指定一个或多个泛型类型参数,可以用于引用任意返回值和参数的委托类型。
在C#中,使用Func<>
和Action<>
两种泛型委托类型来表示任意函数引用和无返回值函数引用。
Func<>
委托类型可用于引用任意带返回值的方法,其定义为:
public delegate TResult Func<out TResult>();
public delegate TResult Func<in T, out TResult>(T arg);
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
……
其中,第一个参数 TResult
表示委托返回类型,out
表示返回类型,其余参数类型 T
、T1
、T2
等为委托参数类型,in
表示输入类型。
Action<>
委托类型可用于引用任意无返回值的方法,其定义为:
public delegate void Action();
public delegate void Action<in T>(T arg);
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);
……
与 Func<>
类似,Action<>
委托也是带有泛型类型参数的,且泛型参数末尾必须是返回类型 Void
,表示这是一个无返回值的方法。
示例说明
以下是两个示例说明泛型委托在C#中的使用:
示例一:使用 Func<> 委托类型
在示例一中,使用 Func<>
委托类型引用 int
类型的加法和除法方法,并对两个数进行计算。代码如下所示:
using System;
class Program
{
static void Main(string[] args)
{
Func<int, int, int> add = (a, b) => a + b; //定义加法方法
Func<int, int, int> divide = (a, b) => a / b; //定义除法方法
int num1 = 6, num2 = 2;
Console.WriteLine("两数之和:{0}", add(num1, num2));
Console.WriteLine("两数之商:{0}", divide(num1, num2));
Console.ReadKey();
}
}
在代码中,定义 add
和 divide
两个 Func<>
委托变量分别引用 int
类型的加法和除法方法。对于 add
变量,使用 =>
表示 Lambda 表达式,将 a + b
表示为其方法体。对于 divide
变量,使用 =>
表示 Lambda 表达式,将 a / b
表示为其方法体。
在 Main
方法中,定义 num1
和 num2
两个整型变量,调用 add
和 divide
方法对两个数进行计算,并输出结果。运行程序,会得到以下输出结果:
两数之和:8
两数之商:3
示例二:使用 Action<> 委托类型
在示例二中,使用 Action<>
委托类型引用 string
类型的转换方法,并将转换结果输出。代码如下所示:
using System;
class Program
{
static void Main(string[] args)
{
Action<string> toUpperCase = (str) => Console.WriteLine(str.ToUpper()); //定义转换为大写字母方法
Action<string> toLowerCase = (str) => Console.WriteLine(str.ToLower()); //定义转换为小写字母方法
string str = "Hello, World!";
toUpperCase(str);
toLowerCase(str);
Console.ReadKey();
}
}
在代码中,定义 toUpperCase
和 toLowerCase
两个 Action<>
委托变量分别引用 string
类型的转换为大写字母和小写字母的方法。对于 toUpperCase
变量,使用 =>
表示 Lambda 表达式,将 Console.WriteLine(str.ToUpper())
表示为其方法体。对于 toLowerCase
变量,使用 =>
表示 Lambda 表达式,将 Console.WriteLine(str.ToLower())
表示为其方法体。
在 Main
方法中,定义 str
字符串变量,调用 toUpperCase
和 toLowerCase
方法对字符串进行转换,并输出结果。运行程序,会得到以下输出结果:
HELLO, WORLD!
hello, world!
以上是使用 C# 中的泛型委托进行编程的示例。通过使用泛型委托可以减少编写大量不同类型的委托的工作,并提高代码的灵活性和通用性,使得代码更加简洁高效。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#中的泛型委托详解 - Python技术站