黑马程序员--委托与事件的初步学习

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- ----------------------


委托:声明非常类似于函数,但没有函数体,且使用关键字delegate

声明:指定了一个返回类型和一个参数列表。定义了委托后,就可以声明该委托类型的变量。接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用。

例子:

第一步:定义委托:delegate   返回值   委托名称 (参数列表);

第二步:声明个委托变量: 委托名称  变量;

第三步:初始化: 变量+=new 委托名称(引用的函数);

	delegate int heji(int a, int b); //定义个委托
        heji hans; //声明个委托
        int jiaf(int a, int b)  //加法函数
        {
            return a + b;
        }
        int jianf(int a, int b) //减法函数
        {
            return a - b;
        }

然后根据不同的条件订阅(注册)他:

            if (cmbysf.SelectedIndex == 0) {
                hans = new heji(jiaf); //把加法赋值给委托,初始化
            }
            else if (cmbysf.SelectedIndex == 1)
            {
                hans = new heji(jianf); //把减法赋值给委托
            }


委托主要用于事件上.


事件:

首先事件是委托的一个变量。事件要先订阅他们。

订阅一个事件的含义就是提供代码,在事件发生时执行这些代码,他们被称为事件处理程序。事件可以有许多订阅的处理程序,在该事件发生时这些处理程序都会被调用。事件处理本身都是简单的函数,唯一限制就是函数必须匹配于事件所要求的返回类型和参数。


说白了,事件就是达到一定条件去执行的函数组。C#中的事件都是系统已经定义好的,执行的条件也都给出了,直接在MSDN上查询就行。

事件在使用前的订阅(注册)的必要性:要不然他都不知道去执行什么函数。


自己定义的事件:

定义个一个委托时,在前面加上event关键字,就是定义了一个事件,当然这个事件没有要执行的函数,随后订阅他。

        public  delegate void Jg(object sender);  //声明个委托
        public event Jg cshi;  //用委托前面加上event就成了 事件 cshi

        public void ShowMsg(object sender) //建立个函数,作为事件注册时 的引用函数
        {
            var v = sender as TextBox;
            MessageBox.Show(v.Text);
                    
        }
        cshi += new Jg(ShowMsg); //订阅他

        //当达到某一条件时使用 事件
        if (textBox1.Text.ToString() == "9")
        {
            cshi(this.textBox1);
        }


以系统自带的textBox控件中的  TextChanged事件为例:

从最开始的声明委托开始:

    
      //第一步	
      public event EventHandler TextChanged;  //声明了一个事件
      //第二步																                 
      this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
      //然后传入一个函数,这个函数就双击textBox之后产生的默认的函数
      //第三步																	         
      private void textBox1_Demo(object sender, EventArgs e) //这是系统双击textbox控件进入的
      {
            
        if (textBox1.Text.ToString() == "9") //上面触发自定义事件的条件
        {
             cshi(this.textBox1);
               
        }
      }


最后那个只是个函数,我们可以把他的名称改掉,然后在第二步那里也做下修改,如下:

    //第三步:  
    private void textBox1_Demo(object sender, EventArgs e) //我们把函数的名称改成textBox1_Demo  
    {          
        if (textBox1.Text.ToString() == "9")  
        {  
            cshi(this.textBox1);  
        }  
    }    
    //第二步的位置:             
    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_Demo); //这里也做下修改 

程序可以正常的运行:



一般事件所要引用函数的2个参数(object sender, EventArgs e):

第一个参数:是对本身的引用,可以用于多个处理函数。

第二个参数:集成自System.EventArgs类,就是事件参数类。


---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- ----------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值