c#委托与事件(详解)

目录
  • 前言
  • 一、声明方法
  • 二、声明委托
  • 三、实例化委托
  • 四、使用委托
  • 总结

前言

.NET中的委托是一个类,它定义了方法的类型,是一个方法容器。委托把方法当作参数,可以避免在程序中大量使用条件判断语句的情况。

项目名为Testclass类名为Program

一、声明方法

class类中声明几个方法,以便委托的使用。

using System;
namespace Test
{
    class Program
    {
        /// <summary>
        /// 返回两个数中较大者
        /// </summary>
        /// <param name="num1">int类型</param>
        /// <param name="num2">int类型</param>
        /// <returns></returns>
        public static int max(int num1, int num2)
        {
            return num1 > num2 ? num1 : num2;//如果num1大于num2时,就返回num1,否则返回num2
        }
        /// <summary>
        /// 返回两个数中较小者
        /// </summary>
        /// <param name="num1">int类型</param>
        /// <param name="num2">int类型</param>
        /// <returns></returns>
        public static int min(int num1, int num2)
        {
            return num1 > num2 ? num2 : num1;//如果num1大于num2时,就返回num2,否则返回num1
        }
        static void Main(string[] args)
        {
        }
    }
}

二、声明委托

声明时使用delegate关键字来声明委托,委托声明定义了一个从System.Delegate类派生的类。

返回类型需要和方法的返回值类型相同,参数需要和传入方法的参数列表相同。

在前方也可以添加访问修饰符privatepublic

声明委托: delegate [返回类型] [委托名](参数1,参数2,....);

using System;
namespace Test
{
    class Program
    {
        delegate int De(int num1,int num2);
        /// <summary>
        /// 返回两个数中较大者
        /// </summary>
        /// <param name="num1">int类型</param>
        /// <param name="num2">int类型</param>
        /// <returns></returns>
        public static int max(int num1, int num2)
        {
            return num1 > num2 ? num1 : num2;//如果num1大于num2时,就返回num1,否则返回num2
        }
        /// <summary>
        /// 返回两个数中较小者
        /// </summary>
        /// <param name="num1">int类型</param>
        /// <param name="num2">int类型</param>
        /// <returns></returns>
        public static int min(int num1, int num2)
        {
            return num1 > num2 ? num2 : num1;//如果num1大于num2时,就返回num2,否则返回num1
        }
        static void Main(string[] args)
        {
        }
    }
}

三、实例化委托

定义委托类后,可以创建委托类的实例,实例化委托的方式有两种。

实例化委托方式一:[委托名] 变量名= new 委托名(方法名); 实例化委托方式二:[委托名] 变量名= 方法名;

using System;
namespace Test
{
    class Program
    {
        delegate int De(int num1,int num2);
        /// <summary>
        /// 返回两个数中较大者
        /// </summary>
        /// <param name="num1">int类型</param>
        /// <param name="num2">int类型</param>
        /// <returns></returns>
        public static int max(int num1, int num2)
        {
            return num1 > num2 ? num1 : num2;//如果num1大于num2时,就返回num1,否则返回num2
        }
        /// <summary>
        /// 返回两个数中较小者
        /// </summary>
        /// <param name="num1">int类型</param>
        /// <param name="num2">int类型</param>
        /// <returns></returns>
        public static int min(int num1, int num2)
        {
            return num1 > num2 ? num2 : num1;//如果num1大于num2时,就返回num2,否则返回num1
        }
        static void Main(string[] args)
        {
            De test1 = new De(max);//实例化委托与方法的对象
            De test2 = new De(min);//实例化委托与方法的对象
        }
    }
}

四、使用委托

在上一个步骤中,test1是委托De与方法max有关的实例化对象

test2是委托De与方法min有关的实例化对象

如果之后需要使用到max方法,就通过test1(参数列表)的方式调用该方法

如果之后需要使用到min方法,就通过test2(参数列表)的方式调用该方法

传入的参数需要和方法定义的形参相同类型、相同个数

using System;
namespace Test
{
    class Program
    {
        delegate int De(int num1,int num2);
        /// <summary>
        /// 返回两个数中较大者
        /// </summary>
        /// <param name="num1">int类型</param>
        /// <param name="num2">int类型</param>
        /// <returns></returns>
        public static int max(int num1, int num2)
        {
            return num1 > num2 ? num1 : num2;//如果num1大于num2时,就返回num1,否则返回num2
        }
        /// <summary>
        /// 返回两个数中较小者
        /// </summary>
        /// <param name="num1">int类型</param>
        /// <param name="num2">int类型</param>
        /// <returns></returns>
        public static int min(int num1, int num2)
        {
            return num1 > num2 ? num2 : num1;//如果num1大于num2时,就返回num2,否则返回num1
        }
        static void Main(string[] args)
        {
            De test1 = new De(max);//实例化委托与方法的对象
            De test2 = new De(min);//实例化委托与方法的对象
            Console.WriteLine("max方法:{0}",test1(10, 20));//调用max方法,并将结果显示到屏幕
            Console.WriteLine("min方法:{0}",test2(10,20));//调用min方法,并将结果显示到屏幕
        }
    }
}

总结

本篇文章就到这里了,想能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 一篇文章彻底搞清楚c#中的委托与事件

    一.什么是委托呢? 听着名字挺抽象,确实不好理解.面试官最喜欢考察这个,而且更喜欢问:"委托和事件有何异同?".如果对一些知识点没有想明白,那么很容易被绕进去.研究任何事物,我们不妨从它的定义开始,委托也不例外.那么先来看c#中的委托定义,先来个例子: public delegate void GetPacage(string code); 这个委托,看起来就是个方法签名,取包裹,需要验证码.与方法签名不同的地方,在于多了一个delegate.c#中不乏一些便利好用的语法,比如fore

  • 浅谈C#中的委托、事件与异步

    从刚接触c#编程到现在,差不多快有一年的时间了.在学习过程中,有很多地方始终似是而非,直到最近才弄明白. 本文将先介绍用法,后评断功能. 一.委托 基本用法: 1.声明一个委托类型.委托就像是'类'一样,声明了一种委托之后就可以创建多个具有此种特征的委托.(特征,指的是返回值.参数类型) public delegate void SomeKindOfDelegate(string result); 2.创建一个在1中创建的委托类型的委托. public SomeKindOfDelegate aD

  • C#中自定义事件和委托实例

    在windows 编程中用到最多的就是控件的事件了,微软给我们很好的方式,把注意力放到事件执行方法的设计和编码上,但是但我们真正弄懂了事件的真正出发执行原理的话,对我们的编程的提高真是非常榜的,例如在windows编程中 如果我单击了一个button按钮触发了button 的click事件  Button1_Click(){} ,但是有时候我们编程的时候,不但想要触发button 的单击事件,我还想要把其他的时间也要调用下来顺序执行,要实现这种方式,除了在方法最后对其他方法的调用,还可以利用将其

  • c#多线程通信之委托事件

    在研究c# 线程之间通信时,发现传统的方法大概有三种: 全局变量,由于同一进程下的多个进程之间共享数据空间,所以使用全局变量是最简单的方法,但要记住使用volatile进行限制. 线程之间发送消息(这个随后文章中会讨论到). CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步,这个主要是实现线程直接同步的一种方法. 本文介绍的一种方法是这三种之外的一种方法,本文中实例是通过创建一个线程类,通过委托事件把值传送到Form所在的类中,同时更新For

  • 详解C#中委托,事件与回调函数讲解

    .Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等. "protected void Page_Load(object sender, EventArgs e)"这段代码相信没有人不熟悉的.细心一点一定会发现,非常多的事件方法都是带了"object sender, EventArgs e"这两个参数.这是不是和委托非常相似呢? 一.委托(有些书中也称为委派)

  • C#窗体间常用的几种传值方式及委托与事件详解

    前言 窗体间的传值,最好使用委托方式传值,开始之前,我们先来说一下委托与事件的关系. 委托:是一个类. 事件:是委托类型的一个特殊实例,只能在类的内部触发执行. 首先创建2个窗体,这里我们以form1为发送窗体,form2为接收窗体 form1窗体 form2窗体 方式一(最简单的方式) form1窗体代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;

  • c#委托与事件(详解)

    目录 前言 一.声明方法 二.声明委托 三.实例化委托 四.使用委托 总结 前言 .NET中的委托是一个类,它定义了方法的类型,是一个方法容器.委托把方法当作参数,可以避免在程序中大量使用条件判断语句的情况. 项目名为Test,class类名为Program 一.声明方法 在class类中声明几个方法,以便委托的使用. using System; namespace Test { class Program { /// <summary> /// 返回两个数中较大者 /// </summ

  • JavaScript中事件委托的示例详解

    目录 事件流 事件委托 结尾 大家好,我是前端西瓜哥.今天我们来认识一下事件委托. 所谓事件委托,就是将原本应该在当前元素绑定的事件,放到它的祖先元素上,让祖先元素来委托处理. 事件流 事件流指从页面中接收事件的顺序,也可理解为事件在页面中传播的顺序. 事件流由两阶段组成: 捕获事件 冒泡事件 我们通常用 addEventListener 给元素添加事件: document.querySelector('#card')addEventListener( 'click', function (ev

  • jquery html动态添加的元素绑定事件详解

    在实际开发中会遇到要给动态生成的html元素绑定触发事件的情况: <div id="testdiv"> <ul></ul> </div> 假设我们要给ul动态添加的<li>绑定click事件形成如下结果 <div id="testdiv"> <ul> <li name="apple">apple</li> <li name="

  • Vue自定义事件(详解)

    前面的话 父组件使用props传递数据给子组件,子组件怎么跟父组件通信呢?这时,Vue的自定义事件就派上用场了.本文将详细介绍Vue自定义事件 事件绑定 每个 Vue 实例都实现了事件接口 (Events interface),即 使用 $on(eventName) 监听事件 使用 $emit(eventName) 触发事件 [注意]Vue 的事件系统分离自浏览器的EventTarget API.尽管它们的运行类似,但是 $on 和 $emit 不是addEventListener 和 disp

  • Android 广播大全 Intent Action 事件详解

    具体内容如下所示: Intent.ACTION_AIRPLANE_MODE_CHANGED; //关闭或打开飞行模式时的广播 Intent.ACTION_BATTERY_CHANGED; //充电状态,或者电池的电量发生变化 //电池的充电状态.电荷级别改变,不能通过组建声明接收这个广播,只有通过Context.registerReceiver()注册 Intent.ACTION_BATTERY_LOW; //表示电池电量低 Intent.ACTION_BATTERY_OKAY; //表示电池电

  • JS触发服务器控件的单击事件(详解)

    如下所示: <script src="../Js/jquery-1.4.2.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { $("#a_doClick").click(function () { $("#<%=btnTest.ClientID%&g

  • jQuery unbind 删除绑定事件详解

    unbind([type],[data]) 是 bind()的反向操作,从每一个匹配的元素中删除绑定的事件.如果没有参数,则删除所有绑定的事件.你可以将你用bind()注册的自定义事件取消绑定.如果提供了事件类型作为参数,则只删除该类型的绑定事件.如果把在绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除. 返回值 : jQuery 参数 : type (String) : (可选) 事件类型 data (Function) : (可选) 要从每个匹配元素的事件中反绑定的事

  • element ui 对话框el-dialog关闭事件详解

    通常会有需求,在关闭弹框后需要清空填写的数据,这时候就需要关闭事件了 <el-dialog title="标题" :visible.sync="bind" size="small" @close='closeDialog'> </el-dialog> 在标签中加入@close='closeDialog' mothods中加入 //关闭弹框的事件 closeDialog(){ this.xxx = '';//清空数据 },

  • 微信小程序页面调用自定义组件内的事件详解

    这篇文章主要介绍了微信小程序页面调用自定义组件内的事件详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 page page.json { "usingComponents": { "my-component": "../components/component/component", } } page.wxml <my-component id="myComponent&quo

随机推荐