本站首页    管理页面    写新日志    退出


«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031


公告

☆★☆★☆★☆★☆★☆
生活的点点记录,以及一些体会...........

喜欢是淡淡的爱,爱是深深的喜欢.

时间会见证一切.......................

欢迎大家指出错误,共同进步..........

期待中..............................

☆★☆★☆★☆★☆★☆


我的分类(专题)

日志更新

最新评论

留言板

链接

世纪音频

 

 


Blog信息
blog名称:
日志总数:162
评论数量:312
留言数量:0
访问次数:939675
建立时间:2005年5月17日




[读书笔记]C#:代表(delegate)和事件(event) (转)
文章收藏

oceanblue 发表于 2009/3/22 21:01:06

  代表(delegate):  它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤: 声明一个delegate对象。 实现和delegate具有相同参数和返回值的函数实现(可以是静态和非静态的)。 产生一个delegate对象的时候,把你刚刚实现的函数作为参数传给他的构造函数。 请看下面例子: using System;using System.Collections.Generic;using System.Text; namespace UsingDelegate{    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);//产生delegate对象            myStaticDelegate("Hello static delegate");//调用        }    }}   事件(event): 让我通过一个例子来模拟事件的整个过程: 创建一个button类,它里面有一个click 事件。 创建一个Form类,他里面有一个我们上面定义的button类。 要求:当我们用户单击button类的时候From类要对他进行处理,输出一条信息“我知道你被单击了” 请看下图: 500)this.width=500'> 首先我们会单击button,然后button会通知Form,然后From就作出相应。这个过程在C#里面应该怎么做到呢? 下面我会列出上述例子的源代码(这里就不介绍怎么声明event等等内容了): using System;using System.Collections.Generic;using System.Text; namespace UsingEvent{    public delegate void ClickEventHandler(object sender, EventArgs e);//声明一个代表:请看文章最后面Note     public class MyButton              //创建MyBottom    {        public event ClickEventHandler ClickEvent;//声明一个事件         public void Click()                                 //单击MyButton        {            if (ClickEvent != null)            {                Console.WriteLine("MyButton: 我被单击了");                ClickEvent(this, null);                          //抛出事件,给所有相应者            }        }    }     public class MyForm    {        public MyButton myButton = new MyButton();         public MyForm()        {             //添加事件到myButton中,当myButton被单击的时候就会调用相应的处理函数            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();//生成一个MyForm             form.myButton.Click();//单击MyForm中的鼠标,效果就出来了        }    }}  Note:public delegate void ClickEventHandler(object sender, EventArgs e);这是事件委托标准的声明方法,其实在参数里面我们可以不传,也可以是其他类型的。但是最好还是使用上面的声明方法,你可以继承EventArgs,来包装你要传送的其他任何参数。


阅读全文(1585) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.484 second(s), page refreshed 144751660 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号