委托、泛型委托等
委托是一种指向方法的数据类型,是一种类型安全的函数指针。这里学习一些具体的用法。
一、基本写法
委托的关键词为delegate,使用委托需要先给出函数签名,比如:
delegate string MyDel1(string s, string s1);
这里定义了一个名为MyDel1的委托,要求指向的函数为两个string参数,输出为string,M1即符合函数签名。
static string M1(string s, string s1) {
return s + s1;
}
将委托指向函数M1的写法为:
MyDel1 d1 = new MyDel1(M1);
也可以简化为:
MyDel1 d1 = M1;
最后调用被指向函数时,用Invoke,并传入需要的参数。
var result1 = d1.Invoke("s", "s1");
简化写法为,直接在d1后面加括号,如果要求参数则传入。
var result = d1("s", "s1");
二、泛型委托及应用
a)泛型委托可以扩展函数签名的使用范围,之前的MyDel的参数类型只能是string,而如果定义成delegate T1 MyDel2< T1, T2,T3>(T2 t2, T3 t3);则可以在使用委托时才指定参数类型。
b)有获取数组元素最大值的方法如下,只提供的排序算法的公用部分,具体的比较方法作为委托CompareFunc1<T>传入:
static T GetMax1<T>(T[] arr, CompareFunc1<T> func) {
T max = arr[0];
for (int i = 1; i < arr.Length; i++) {
if (func(arr[i], max)) {
max = arr[i];
}
}
return max;
}
delegate bool CompareFunc1<T>(T o1, T o2);
使用GetMax1需要给出排序方法,这种做法比较灵活,尤其对于非值类型来说。
三、内置委托
.Net类库中内置了两个泛型委托Action和Func,Action为无返回值的委托,一共有16个重载,最多可以定义16个参数。
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);
Func有返回值,输入参数从0-16个,一共17个重载,Func的形式为,最后一个泛型参数必须对应输出值。
public delegate TResult Func<in T, out TResult>(T arg);
学习资料:如鹏网.net提高班http://www.rupeng.com/News/10/4603.shtml
欢迎关注公众号【菜鸟程序员成长记】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具