委托:一种类型,表示方法引用的类型;一个委托是一个指向方法的引用,或者说,一个委托的实例就是一个指向某个方法的对象,这是一个简单却十分强的的概念
首先委托的定义格式
public delegate 返回值 Mydelegate(参数列表);
其实委托的定义和函数的定义差不多,就是委托多了一个deleagate关键字。
定义好了委托我们可以怎么使用呢?
static void Add1(int a, int b)
{
Console.WriteLine(a+b);
}
static void Sub(int a, int b)
{
Console.WriteLine(a - b);
}
static string Print(int a)
{
renturn a.toString();
}
static string Print1(int b)
{
renturn b.toString();
}
这是四个静态方法
我们可以使用 Mydelegate mydelegate = Sub; mydelegate(1,1)就调用了Sub方法
mydelegate(1,1) 和Sub(1,1)是一样的都是调用了Sub方法
这就是一个怎么使用委托的方法
还可以mydelegate += Add1;都是可以的
委托有两种类型
一种是Action无返回值,无参数列表的委托
一种是Action<>无返回值,有参数列表的的委托类型
Func<T>是一种返回值为T类型的委托类型(T是泛型)
比如说可以 Action<int,int> add1 = Add1;
add1(1,2) ;
Func<int,stirng> add = Print; 第一个为int 类型的参数,第二个为返回值
add+=print1;
add(1);
要注意的是Func<T>返回值类型为T类型的委托类型,当Fun中委托对象指向了多个方法时,返回最后一个执行的方法
下面看一个小案例,输入一个字符串
要求1。将所有的大写字母变成小写
2 。将所有的小写字母变成大些,
3。将输入的字符串后面+*号
static string ToUpper(string str)
{
return str.ToUpper();
}
static string ToLower(string str)
{
return str.ToLower();
}
static string ToStar(string str)
{
return str + "*";
}
static void Mydelegete(Func<string,string> func,string str)
{
Console.WriteLine(func(str));
}
在Main函数中测试
Mydelegate(ToUpper, "abc"); //ABC
Mydelegate(ToLower, "ABC"); abc
Mydelegate(ToStar, "abc"); abc*