C#基本功------委托和事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#基本功------委托和事件相关的知识,希望对你有一定的参考价值。

首先我们来看一个代码

 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("哈哈,我可以打游戏了,我好爽,不服你打我");
        }

显然我们是这么用的,那么,懂了吗?委托的最基本的用处就是给你在一个方法里面挖一个坑,当你需要使用这个坑的时候,把他填上就可以了

 

 



 


 

以上是关于C#基本功------委托和事件的主要内容,如果未能解决你的问题,请参考以下文章

C#基本功------委托和事件--拉姆达表达式

C#中的委托和事件(续)

浅谈C#委托和事件(转载)

C#委托与事件的简单使用

对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段

C#事件