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

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

 




				
时间: 2024-10-13 03:02:03

C#基本功------委托和事件(一)的相关文章

C#基本功------委托和事件(三)

下面我们来说一下系统自带的委托,一个就黑丝fun<>一个就是Action<> 这两个委托是系统给我们用的,我们一般用的时候用这两个委托就行了,不需要再自己声明一个委托,这两个的区别是前者有返回值,而后者是什么返回值的 下面我们先来介绍下IEnumerable这个东东....微软给我们的解释是:公开枚举数,支持在指定的集合上进行简单的迭代,说明了凡是实现这个接口的东西,都可以实现foreach循环遍历,这就是为什么数组可以进行遍历,因为数组的父类是Array,而Array实现了接口I

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

委托的另一种用法---------匿名方法: public delegate void MyDel(string msg);----声明的委托 class Program { static void Main(string[] args) { MyDel mdl = delegate(string str) { Console.WriteLine(str); }; mdl("床前明月光"); Console.ReadKey(); } }另一种简单的写法 public delegate

C#高级知识点概要(1) - 委托和事件

作者:linybo 要成为大牛,必然要有扎实的基本功,不然时间再长项目再多也很难有大的提升.本系列讲的C# 高级知识点,是非常值得去撑握的,不仅可以让你写代码时游刃有余,而且去研究和学习一些开源项目时,也不会显得那么吃力了. 希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高级知识点都是要求开发时能达到可以徒手写出来的水平(不依赖搜索引擎.找笔记等

[ASP.NET MVC 大牛之路]02 - C#高级知识点概要(1) - 委托和事件

在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但足矣.要深入研究还需要去查看更多的专业资料. 要成为大牛,必然要有扎实的基本功,不然时间再长项目再多也很难有大的提升.本系列讲的C# 高级知识点,是非常值得去撑握的,不仅可以让你写代码时游刃有余,而且去研究和学习一些开源项目时,也不会显得那么吃力了. 希望大家记住,这里讲的所有的知识点,不仅仅是了解

6. 第二章:C#委托和事件

第二章:C#委托和事件 第三节:Action<T>和Func<T,TResult> 这些都是在.net framework 3.5新增的委托类型,在.net framework 2.0里面,我们用的委托是Delegate 过多的理论叙述不是我们的目的,这里我们用示例的方式展示给大家看一看这些新增的委托的用法:(涉及到函数的重载和泛型的知识点,C#基础不在此处赘述.) 1. Action / Action<T> / Action<T,S> / Action&l

委托与事件

委托在底层就是一个函数的指针,委托是事件的基础. 你可以传递引用类型.值类型.但是你有没有需要传一个方法呢?传方法的过程就是委托. 消息类: public class Message { /// <summary> /// 传引用类型 /// </summary> /// <param name="msg"></param> public static void Send(string msg) { Console.WriteLine(&

C#学习(一):委托和事件

预备知识 在学习委托和事件之前,我们需要知道的是,很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知. 而发布者/订阅者模式可以满足这种需求.简单来说,在这种模式中,发布者定义了一系列程序的其他部分可能感兴趣的事件.其他类可以"注册",以便再这些事件发生时发布者可以通知它们.这些订阅者类通过向发布者提供一个方法来"注册"以获取通知.当事件发生时,发布者"触发事件",然后执行订阅者提交的所有事件.

C#中委托和事件

目 录 1.1 理解委托 2 1.1.1 将方法作为方法的参数 2 1.1.2 将方法绑定到委托 4 1.2 事件的由来 6 1.2.1 更好的封装性 6 1.2.2 限制类型能力 9 1.3 委托的编译代码 10 1.4 .NET 框架中的委托和事件 11 1.4.1 范例说明 11 1.4.2 Observer 设计模式简介 12 1.4.3 实现范例的Observer 设计模式 13 1.4.4 .NET 框架中的委托与事件 14 1.5 委托进阶 16 1.5.1 为什么委托定义的返回值

C#委托和事件定义和使用

委托 定义委托的语法和定义方法比较相似,只是比方法多了一个关键字delegate ,我们都知道方法就是将类型参数化,所谓的类型参数化就是说该方法接受一个参数,而该参数是某种类型的参数,比如int.string等等:而委托是将方 法参数化,说了上面的那个类型参数化之后,相信你也能猜到方法参数化的意思了,对,就是将方法作为一个参数传到一个委托中. 首先来看看声明委托的语句: public deletate void MyDelegate(); public:访问修饰符  delegate:关键字