C#异步线程(一)异步委托

一、关于委托的回顾

委托其实相当于C++里面的函数指针。官方描述是:委托是方法的类型安全的引用。

1、普通委托

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{ //delegate定义的是一个类型,这个类型变量的值是签名相同的函数 delegate char getCharFromString(string str, int index); class Program { static void Main(string[] args) { //定义一个getCharFromString(delegate)型的变量,并为其赋值。赋值的条件是:签名相同 getCharFromString fac = get; //通过委托调用函数功能 Console.WriteLine(fac("yuyong", 2)); getCharFromString facNext = getNext; Console.WriteLine(facNext("yuyong", 2)); Console.ReadKey(); } static char get(string str, int index) { return str.ToArray()[index]; } static char getNext(string str, int index) { return str.ToArray()[index + 1]; } }}

2、Func委托

Func委托是一种泛型委托,例如,上面的delegate char getCharFromString(string str, int index);等价于Func<string,int, char>

定义Func的类型列表最后一个类型是返回值类型,前面的类型都是输入参数类型。如果类型列表只有一个类型,那这个类型就是返回类型。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{ delegate char getCharFromString(string str, int index); class Program { static void Main(string[] args) { getCharFromString fac = get; Console.WriteLine(fac("yuyong", 2)); getCharFromString facNext = getNext; Console.WriteLine(facNext("yuyong", 2)); //定义与getCharFromString等价的Func<T>委托 Func<string, int, char> fac_func = get; Console.WriteLine(fac_func("yuyong", 2)); Func<string, int, char> facNext_func = getNext; Console.WriteLine(facNext_func("yuyong", 2)); Console.ReadKey(); } static char get(string str, int index) { return str.ToArray()[index]; } static char getNext(string str, int index) { return str.ToArray()[index + 1]; } }}

3、匿名委托

借助delegate关键字还可以定义匿名委托

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{ delegate char getCharFromString(string str, int index); class Program { static void Main(string[] args) { getCharFromString fac = delegate(string str, int index) { return str.ToArray()[index]; }; Console.WriteLine(fac("yuyong", 2)); Func<string, int, char> facNext = delegate(string str, int index) { return str.ToArray()[index + 1]; }; Console.WriteLine(facNext("yuyong", 2)); Console.ReadKey(); } }}

把自己当傻瓜,不懂就问,你会学的更多

C#异步线程(一)异步委托

相关文章:

你感兴趣的文章:

标签云: