首先我们来看一个代码
static void Main(string[] args) { Test(Show); } public static void Test() { } public static void Show() { }红色标注的地方发生了错误,显然是不能传入一个方法的,这个时候我们会想
public static void Test(XXXX show)
{ }如果有个XXXX类型,能够让我传入一个方法,那就好了,那么,我们怎么做呢?
委托!!!
public delegate void Mydelegate();----我们来讲解下为什么这么写,首先delegate是声明委托的关键字viod是我们想要调用函数的返回值,明显Show的返回值是void
括号里的内容,是我们想要调用函数的参数,显然是没有参数的,也就是说,你想要传一个方法,必须有一个方法的类型 SH其实就是Show static void Main(string[] args) { Test(Show); } public static void Test(Mydelegate SH) { } public static void Show() { }
请看下面一段代码
public delegate int Mydelegate(int a1,int a2); static void Main(string[] args) { Add(Ts);-------执行1 Console.ReadKey(); } public static void Add(Mydelegate SH)----执行2 { int sum = SH(1,5);----执行3 Console.WriteLine(sum); } public static int Ts(int n1,int n2) { return n1 + n2; }
下面改造一下这个代码
public delegate int Mydelegate(int a1,int a2); static void Main(string[] args) { int sum = Add(Ts,50,60);------想传入什么值都可以 Console.WriteLine(sum); Console.ReadKey(); } public static int Add(Mydelegate SH,int num1,int num2) { return SH(num1,num2); } public static int Ts(int n1,int n2) { return n1 + n2; }
现在我们对于委托有了基本概念,但是,我们为什么要用委托呢?委托在什么情况下使用呢?
public void Dosth()//这是student类中的一个方法 { Console.WriteLine("吃早饭"); //=====这里是个坑,因为我可能做的事情不一样,所以这里使用委托比较好 Console.WriteLine("吃午饭"); }
static void Main(string[] args)//主函数中调用这个方法,这个时候,我们知道,我们不可能一直做一样的事情 { Student stu = new Student(); stu.Dosth(); Console.ReadKey(); }
====================================================
public delegate void MyDel();//无参数无返回值的委托
这个时候,我们将这段代码写在Dosth()这个方法的上面,shengm一个委托,我们怎么用呢?
static void Main(string[] args) { Student stu = new Student(); stu.Dosth(play); Console.ReadKey(); } public static void play() { Console.WriteLine("哈哈,我可以打游戏了,我好爽,不服你打我"); }
显然我们是这么用的,那么,懂了吗?委托的最基本的用处就是给你在一个方法里面挖一个坑,当你需要使用这个坑的时候,把他填上就可以了