c#中的泛型委托(@whitetaken)

author author     2022-08-21     208

关键词:

今天学习一下c#中的泛型委托。

1.一般的委托,delegate,可以又传入参数(<=32),声明的方法为  public delegate void SomethingDelegate(int a);

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace delegateSummary {
 8     public delegate void GetIntDelegate(int a); //声明一个委托
 9     public class getIntClass { 
10         public static void SetDelegateString(int a,GetIntDelegate getIntDelegate) {//使用委托
11             getIntDelegate(a);
12         }
13         public  void getInt1(int a) {   //方法1
14             Console.WriteLine("getInt1方法调用,参数为:" + a);
15         }
16         public void getInt2(int a) {   //方法2
17             Console.WriteLine("getInt2方法调用,参数为:" + a);
18         }
19     }
20     class Program {
21         static void Main(string[] args) {
22             getIntClass gc=new getIntClass();
23             getIntClass.SetDelegateString(5, gc.getInt1);        //方法1,2作为委托的参数
24             getIntClass.SetDelegateString(10, gc.getInt2);      
25             Console.WriteLine("=====================");
26             GetIntDelegate getIntDelegate;
27             getIntDelegate = gc.getInt1;                         //将方法1,2绑定到委托
28             getIntDelegate += gc.getInt2;
29             getIntClass.SetDelegateString(100, getIntDelegate); 
30             Console.Read();
31         }    
32     }
33 }

输出结果,注意两种方式的不同,第一种将方法作为委托的参数,第二种是将方法绑定到委托。

技术分享

2.泛型委托之Action,最多传入16个参数,无返回值。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace delegateSummary {
 8     class Program {
 9         static void Main(string[] args) {
10             TestAction<string>(getString, "WhiteTaken");        //传入方法
11             TestAction<int>(getInt, 666);
12             TestAction<int, string>(getStringAndInt, 666, "WhiteTaken");
13             Console.Read();          
14         }
15         public static void TestAction<T>(Action<T> action,T p1) {           //Action传入一个参数测试
16             action(p1);
17         }
18         public static void TestAction<T, P>(Action<T, P> action, T p1, P p2) {  //Action传入两个参数测试
19             action(p1,p2);
20         }
21         public static void getString(string a) {                                //实现int类型打印
22             Console.WriteLine("测试Action,传入string,并且传入的参数为:" +a);
23         }
24 
25         public static void getInt(int a) {                                      //实现String类型打印
26             Console.WriteLine("测试Action,传入int,并且传入的参数为:" + a);
27         }
28 
29         public static void getStringAndInt(int a, string name) {               //实现int+string类型打印
30             Console.WriteLine("测试Action,传入两参数,并且传入的参数为:" + a+":"+name);
31         }
32     }
33 }

测试结果:

技术分享

3.泛型委托之Func,最多传入16个参数,有返回值。(写法与Action类似,只是多了返回值)

4.泛型委托之predicate(不是很常用),返回值为bool,用在Array和list中搜索元素。(没有用到过,等用到了再更新)

 

详解c#泛型(代码片段)

  一、C#中的泛型引入了类型参数的概念,类似于C++中的模板,类型参数可以使类型或方法中的一个或多个类型的指定推迟到实例化或调用时,使用泛型可以更大程度的重用代码、保护类型安全性并提高性能;可以创建自定义... 查看详情

C# 中的泛型与非泛型性能

】C#中的泛型与非泛型性能【英文标题】:Genericvsnot-genericperformanceinC#【发布时间】:2013-06-2520:53:27【问题描述】:我写了两个等价的方法:staticboolF<T>(Ta,Tb)whereT:classreturna==b;staticboolF2(Aa,Ab)returna==b;时差:00:00:00.038002200:00:00.01... 查看详情

c#中的泛型

泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。泛型为.NET框架引入了类型参数(typeparameters)的概念。类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明、实... 查看详情

无法将x类型转换为t.泛型类中的泛型委托(代码片段)

...地声明为Foo。在这种情况下,我甚至不需要SomeGenericClass中的泛型类型参数classSome 查看详情

c#中的泛型和泛型集合

...性能,他的最常见应用就是创建集合类,可以约束集合类中的元素类型。比较典型的泛型集合是List<T>和Dictionary<>;泛型集合List<T>语法List<T>对象名=newList<T> 查看详情

C#中的泛型,使用变量的类型作为参数[重复]

】C#中的泛型,使用变量的类型作为参数[重复]【英文标题】:GenericsinC#,usingtypeofavariableasparameter[duplicate]【发布时间】:2011-01-0715:33:37【问题描述】:我有一个通用方法boolDoesEntityExist<T>(Guidguid,ITransactiontransaction)whereT:IGloballyI... 查看详情

c#中的泛型

...解一下泛型的定义:泛型允许我们延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。(也就是说泛型是可以与任何数据类型一起工作的类或方法)模块内高内聚,模块间低... 查看详情

c# 中的泛型 & 访问 T 的静态成员

】c#中的泛型&访问T的静态成员【英文标题】:Genericsinc#&accessingthestaticmembersofT【发布时间】:2010-09-0609:33:27【问题描述】:我的问题涉及c#以及如何访问静态成员......好吧,我真的不知道如何解释它(哪种对问题不好不是... 查看详情

c#泛型编程

1.泛型的概念   C#中的泛型与C++中的模板类似,泛型是实例化过程中提供的类型或类建立的。泛型并不限于类,还可以创建泛型接口、泛型方法,甚至泛型委托。这将极大提高代码的灵活性,正确使用泛型可以显著缩... 查看详情

c#中的泛型

前言这篇文章和大家一起学习泛型。我们目前使用的语言结构,可以建立多种不同类型的强大对象。具体步骤是声明类,封装需要的行为之后创建类的实例对象。目前为止,所有类声明用到的类型都是特定类型。有可... 查看详情

如何在 C# 的泛型中使用扩展

...】:我是C#的新手,如何在C#中使用下面的泛型,我想要C#中的Java语句,List<?extendsMySuperClass>list=newArrayList<MySubClass>();Java允许以上,我们可以在C#中实现相同的功能吗?【问题讨论】 查看详情

聊聊c#和c++中的泛型模板底层玩法

...点意思,这一篇我们来聊聊它们底层是怎么玩的?一:C++中的模板玩法毕竟C++是兼容C语言,而C是过程式的玩法,所以C++就出现了两种模板类型,分别为:函数模板 查看详情

如何从 C# 中的泛型类型数组中选择一组随机值?

】如何从C#中的泛型类型数组中选择一组随机值?【英文标题】:HowtopicksetnumberofrandomvaluesfromagenerictypearrayinC#?【发布时间】:2020-05-2208:38:18【问题描述】:我想从泛型类型数组中选择一组随机值(比如说2个值)。我设法实现了... 查看详情

泛型类的基本使用

泛型好处:增加类型好处,带来编码的方便常见的泛型:泛型类和泛型方法,泛型委托(自定义委托,常见的泛型委托(Func,Action))泛型类的规范:publicclass类名<T>类的成员T:仅仅是一个占位符,只要符合c#命名规范即可,但一... 查看详情

c#中的泛型是啥意思?

泛型是2.0版C#语言和公共语言运行库(CLR)中的一个新功能。泛型将类型参数的概念引入.NETFramework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时... 查看详情

记录c#泛型(代码片段)

常见的泛型类型泛型类classMyClass<T>//......泛型接口interfaceGenericInterface<T>voidGenericMethod(Tt);泛型方法publicvoidMyGenericMethod<T>()//......泛型数组publicT[]GenericArray;泛型委托publicdelegateTOu 查看详情

c#进阶c#泛型(代码片段)

...1f3ab;hello大家好啊,我是哈桑c,本文为大家介绍C#中的泛型。1、泛型的概念泛型允许延迟指定一个或多个变量的类型。泛型指的是类或其它数据类型在定义时不会指定类中的属性或方法参数的具体类型,而是在实例化... 查看详情

聊聊c#和c++中的泛型模板底层玩法(代码片段)

...篇我们来聊聊它们底层是怎么玩的?一:C++中的模板玩法毕竟C++是兼容C语言,而C是过程式 查看详情