首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 事件理解有关问题

2012-04-11 
C# 事件理解问题看这两句代码:m_nameButton.Click + new System.EventHandler(NameButtonClicked)m_clea

C# 事件理解问题
看这两句代码:
m_nameButton.Click += new System.EventHandler(NameButtonClicked);
m_clearButton.Click += new System.EventHandler(ClearButtonClicked);

问题:
1,m_nameButton.Click代表什么 代表一个委托吗 它该怎么理解
2,m_nameButton m_clearButton都绑定了Click事件 如何区分呢
3,选两句中的一句解释一下这一句的执行过程
谢谢

[解决办法]
1,m_nameButton.Click代表什么 代表一个委托吗 它该怎么理解
Click应该是事件
System.EventHandler 才是委托

2,m_nameButton m_clearButton都绑定了Click事件 如何区分呢
对象不一样,没啥好区分的


3,选两句中的一句解释一下这一句的执行过程
m_nameButton.Click += new System.EventHandler(NameButtonClicked);
当点击了m_nameButton,会委托System.EventHandler来执行NameButtonClicked方法
[解决办法]
完全属于基础问题,基础问题只能按照规定来做,因为别人就是这么定义的

请参见MSDN "委托","事件"等章节的内容

这里略示例一下,如何申明一个事件:

C# code
    public class A    {        //在这里定义一个事件        public event EventHandler TestEvent;        //为这个事件写一个判断(MSDN的一般约定方案,不是必须方案)        protected virtual void OnTestEvent()        {            if (this.TestEvent != null) this.TestEvent.Invoke(this, new EventArgs());        }        int i;        //为事件设定一个用于触发的属性        public int I        {            get            {                return this.i;            }            set            {                if (value > 100 || value < 0) this.OnTestEvent(); else this.i = value;            }        }    }    public class B    {        //要使用A类的事件先要申明一个A类对象        A a;        public B()        {            this.a = new A(); this.a.TestEvent += this.a_TestEvent;        }        void a_TestEvent(object sender, EventArgs e)        {            //事件响应        }    }
[解决办法]
m_nameButton.Click事件受委托调用NameButtonClicked这个方法,也就是说m_nameButton.Click会调用NameButtonClicked这个方法!
[解决办法]
2.m_nameButton m_clearButton都绑定了Click事件 如何区分呢 
 看他们委托谁做事

3.我就选这句
m_nameButton.Click += new System.EventHandler(NameButtonClicked);

m_nameButton触发Click事件要NameButtonClicked帮忙做事,也就是委托NameButtonClicked

NameButtonClicked可以听从m_nameButton的Click号召也是有来头的,NameButtonClicked要符合EventHandler委托签名
EventHandler委托签名如下
public delegate void EventHandler (Object sender,EventArgs e)
也就是NameButtonClicked函数的输入参数必须是(Object sender,EventArgs e),而返回值必须是void

热点排行