首先,委托的关键字是Delegate ,委托是和类同级别的对象,委托应该声明成Public。下面我们先来看下这段代码:
public delegate int GreetingDelegate(int a ,int b);//定义委托
static void Main(string[] args)
{
Console.WriteLine(pro(3,4,add));
}public static int pro(int x, int y, GreetingDelegate Gd )
{
return Gd(x,y);
}
public static int add(int x,int y) {
return x + y;
}
上面代码首先,声明一个委托变量,然后再把委托变量作为Pro里面参数 最后返回委托的方法
我们可以得出结论 :
1.委托可以把方法当作参数一样传递
2.委托方法的参数定义能够确定方法可以代表的方法种类
委托出了上面的调用方式外还有一种调用方式:
public delegate int GreetingDelegate(int a ,int b);//定义委托
static void Main(string[] args)
{
GreetingDelegate d1;
d1 =pro;
d1 += add;
Console.WriteLine( d1(3, 4));
}
public static int pro(int x, int y)
{
return x-y;
}
public static int add(int x,int y) {
return x + y;
}
这段代码也是先声明一个委托变量 然后把pro方法赋值给d1最后绑定add方法并调用
结论:
1.我们可以把方法赋值给委托变量,委托变量可以绑定方法(第一次d1=pro是赋值,第二次d1+=add才是绑定方法 而我们调用的d1(3,4)就相当于调用的add(3,4),如果第一次就用+=将出现为赋值对象)
2.委托对象+=方法 (绑定方法)
委托对象-=方法(取消绑定方法)
3.同一委托对象可以绑定多个方法,并可以依次执行所有绑定方法
那有没有方便简单的写法呢?回答当然是有的!于是出现了Action,Action<T>,Func<T>这种委托对象
我们先来看看Action和Action<T>这两个委托对象
static void Main(string[] args){
Action<int, int> T = new Action<int, int>(pro);
Action T1 = new Action(add);
T(3, 4);
T1();
}
public static void pro(int x, int y)
{
Console.WriteLine(x+y);
}
public static void add() {
Console.WriteLine("Hello");
/*也可以使用下面这种简写方式
Action<int, int> T = pro;
Action T1 = add;
T(3, 4);
T1();
*/
}
结论:
1.Action 可以无参,也可以有参数,但是返回值必须是Void
2.Action至少0个参数,最多16个参数
最后让我们来看下Func
static void Main(string[] args)
{
Func<int, int,int> T = new Func<int, int,int>(pro);
Console.WriteLine( T(3, 4));
}
public static int pro(int x, int y)
{
return x + y;
}
/*简写方式如下
static void Main(string[] args)
{
Func<int,int,int> T = pro;
T(3, 4);
}
public static int pro(int x, int y)
{
return x+y;
}
*/
结论:
1.Func是必须有返回值的泛型委托
2.Func至少0个参数,最多16个参数
3.Func最后一个参数代表的是返回值类型,前面的是输入参数类型(如Func<T,T1,T2,T3>输入T1,T2,T3然后输出T类型)
通过上面这些,我对委托有了一定的了解,但是在实际开发中还是要深入理解并运用起来,这是我的第一篇博客,以后还多发很多的博客,希望大家多多指导,给出建议和不足