#1、委托的定义
修饰符 delegate 返回值类型 委托名(委托参数);
例如
public delegate void Human();
#2、实例化委托
定义完委托之后需要实例化委托(定义类 之后需要创建对象)
在类当中实例化的叫对象;在委托当中叫委托实例。
委托名 委托实例 =new 委托名(方法名);
例如
Human mydelegate = new Human(SayHello);
3、调用委托
委托实例(委托参数);
例如
mydelegate();
下面是vs当中的演示
//定义委托
delegate void Human();
static void Main(string[] args)
{
//实例化委托
Human mydelegate = new Human(SayHello);
//调用委托
mydelegate();
Console.ReadKey();
//方法1
void SayHello()
{
Console.WriteLine("Hello!");
}
}
#4、委托的作用
为什么不直接调用方法?
例如下面是直接调用函数
static void Main(string[] args)
{
//直接调用函数
SayHello();
//Human mydelegate = new Human(SayHello);
//mydelegate();
Console.ReadKey();
void SayHello()
{
Console.WriteLine("Hello!");
}
}
为什么非要用委托去调用方法,而不直接调用方法?
举例说明
static void Main(string[] args)
{
//打印1
Console.WriteLine(6);
//打印2
int i=6;
Console.WriteLine(i);
Console.ReadKey();
}
打印1和打印2的区别在于打印的i是可以变的
可以通过改变变量i的数值,来改变最后的输出值
简单来说委托作用就是可以存放一个方法,这个方法可变(方法类型要与声明的委托类型保持一致且参数类型和参数个数也要一致)
在委托当中可以将方法当作一个变量,通过赋值方式改变使用的方法
如下图所示
最开始委托的方法是SayHello 之后委托被重新赋值为SayBye
//定义委托
delegate void Human();
static void Main(string[] args)
{
//SayHello();
Human mydelegate = new Human(SayHello);
//将mydelegate 重新赋值为SayBey方法2
mydelegate = SayBey;
//调用委托
mydelegate();
Console.ReadKey();
//方法1
void SayHello()
{
Console.WriteLine("Hello!");
}
//方法2
void SayBye()
{
Console.WriteLine("Bye!");
}
}
此时输出的结果不再是Hello而是 Bye!