C#代表(delegate)和事件(event)

来源:互联网 发布:淘宝网换货预约快递 编辑:程序博客网 时间:2024/05/20 02:53
代表(delegate):

它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤:

  1. 声明一个delegate对象。
  2. 实现和delegate具有相同参数和返回值的函数实现(可以是静态和非静态的)。
  3. 产生一个delegate对象的时候,把你刚刚实现的函数作为参数传给他的构造函数。

请看下面例子:源码下载

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DelegateDemo{    public delegate void MyDelegate(string mydelegate); //声明一个delegate对象    public class TestClass    {        //实现有相同参数和返回值的函数        public void HelloDelegate(string mydelegate)        {            Console.WriteLine(mydelegate);        }        //实现有相同参数和返回值的静态函数        public static void HelloStaticDelegate(string mystaticdelegate)        {            Console.WriteLine(mystaticdelegate);        }    }    class Program    {        static void Main(string[] args)        {            TestClass testClass = new TestClass();            MyDelegate mydelegate = new MyDelegate(testClass.HelloDelegate); //产生delegate对象            mydelegate("Hello delegate");            MyDelegate myStaticDelegate = new MyDelegate(TestClass.HelloStaticDelegate);            myStaticDelegate("Hello static delegate");            Console.ReadKey();        }    }}

 

事件(event):

让我通过一个例子来模拟事件的整个过程:

  1. 创建一个MyButton类,它里面有一个Click 事件。
  2. 创建一个MyForm类,他里面有一个我们上面定义的MyButton类。
  3. 要求当我们用户单击MyButton类的时候MyForm类要对他进行处理,输出一条信息“我知道你被单击了”

请看下面例子:源码下载

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DelegateAndEventDemo{    public delegate void ClickEventHandler(object sender, EventArgs e); //声明一个代理    public class MyButton    {        public event ClickEventHandler ClickEvent; //声明一个事件        public void Click()        {            if (ClickEvent != null)            {                Console.WriteLine("MyButton:我被单击了");                ClickEvent(this, null);            }        }    }    public class MyForm    {        public MyButton myButton = new MyButton();        public MyForm()        {            myButton.ClickEvent += new ClickEventHandler(OnClickEvent);        }        void OnClickEvent(object sender, EventArgs e)        {            Console.WriteLine("MyForm:我知道你被单击了");        }    }    class Program    {        static void Main(string[] args)        {            MyForm form = new MyForm();            form.myButton.Click();            Console.ReadKey();        }    }}

 

Note:public delegate void ClickEventHandler(object sender, EventArgs e);这是事件委托标准的声明方法,其实在参数里面我们可以不传,也可以是其他类型的。但是最好还是使用上面的声明方法,你可以继承EventArgs,来包装你要传送的其他任何参数。 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 科目二考试脚抖怎么办 面试新工作没打电话怎么办 怀孕5个月胎位低怎么办 做业务很害怕打电话怎么办 固定电话总是接到骚扰电话怎么办 电话卡通话被限制了怎么办? 手机名单拉黑了怎么办 被苹果6s被拉黑怎么办 重庆福利企业解聘残疾职工怎么办 被银行拉入黑名单怎么办 借的钱还不起了怎么办 支付宝手机号空号了怎么办 到处贷不到钱了怎么办 还不起钱借不到怎么办 闯红灯收到短信不去扣分怎么办 被一家公司骗了怎么办 oppo手机无线网信号差怎么办 oppo手机无线网网速慢怎么办 电脑无法解析dns地址怎么办 vivox9手机卡顿反应慢怎么办 vivo手机设置成英文怎么办 wi-fi模块坏了怎么办 苹果手机dns被劫持怎么办 圆通快递一直不派送怎么办 凯越没有高压火怎么办 理财回执单丢了怎么办 余额宝超10万怎么办 商场主题经营改变商户怎么办 一个好的项目需要资金怎么办 没有做暂估入库的凭证怎么办 电脑显示宽带连接已断开怎么办 电脑ip地址连不上网怎么办 百度网盘资源打不开怎么办 百度网盘视频格式不支持怎么办 origin注册邮箱填错了怎么办 58同城手机输入不合法怎么办 银行卡密码输入错误三次怎么办 私密相册系统升级后打不开怎么办 由于志愿没填好孩子没书读怎么办 文具店不开了货怎么办 华为手机通讯录联系人重复怎么办