1.概念
C# 中的委托(Delegate)是一种引用类型,类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
2.语法格式
修饰符 delegate 返回类型 委托名称 (参数列表)
3.与委托类型相匹配的方法必须满足的条件
1)这二者具有相同的签名,即具有相同的参数数目,并且类型相同,顺序相同,参数的修饰符也相同;
2)这两者具有相同的返回值类型
4.C# 内置委托
4.1Action 委托
Action 委托用于指向没有返回值的方法。
比如:
1Action action = new Action(Hello); 2 3private void Hello() 4{ 5 Console.WriteLine("Hello"); 6}
Action<T> 委托用于指向没有返回值,有一个T类型的参数 的方法。
比如:
1Action<string> action = new Action<string>(Hello); 2 3private void Hello(string name) 4{ 5 Console.WriteLine("Hello, "+ name); 6}
4.2Func 委托
Func 委托用于指向含有返回值的方法。
Func<TResult> 委托用于指向有TResult类型的返回值,没有参数 的方法。
比如:
1Func<int> func = new Func<int>(GetSum); 2 3private int GetSum() 4{ 5 return 0; 6}
Func<TResult, T1> 委托用于指向有TResult类型的返回值,有一个T1类型的参数 的方法。
比如;
1Func<int, int> func = new Func<int, int>(GetSum); 2 3private int GetSum(int stop) 4{ 5 int sum = 0; 6 for (int i = 1; i <= stop; i++) 7 { 8 sum += i; 9 } 10 return sum; 11}
5.委托的应用
public class TestClass
{
public int Add(int x,int y)
return x+y;
}
class Program
{
public delegate int MyDelegate(int x, int y); //定义一个委托类型
static void Main(string[] args)
{
TestClass tc = new TestClass();
MyDelegate md = tc.Add; //创建委托类型的实例md,并绑定到Add方法
int intSum = md(2, 3); //委托的调用
Console.WriteLine("运算结果是:“+intSum.ToString());
Console.Read();
}
}