zoukankan      html  css  js  c++  java
  • 简单理解和使用 C# 委托与事件

    委托和事件

    委托:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

    好的,简单了解了一下委托,接下来我们就自己来声明一个委托。

    
    
    //声明了一个 具有两个string类型参数返回值为空 的委托类型
    public delegate void MyDelegate(string item1, string item2);
     

    接下来我们就声明一个委托对象

    
    
    //声明委托对象 
    public MyDelegate myDelegate;
     

    继续下来我们就要为这个委托对象给予实际参数

    
    
    //调用委托
    myDelegate(textBox1.Text,textBox2.Text); 
     

    下面我们来看完整的代码

    
    
        //声明了一个 具有两个string类型参数返回值为空 的委托类型
        public delegate void MyDelegate(string item1, string item2);
    
        public partial class SubWindow : Form
        {
    
            //定义一个委托对象
            public MyDelegate myDelegate;
    
            private void btnSure_Click(object sender, EventArgs e)
            {
                //调用委托
                myDelegate(textBox1.Text,textBox2.Text);
            }
        }
    
    

    然后我们再从另一个类里来实现这个委托

    //为委托赋值 并调用委托
    private void button1_Click(object sender, EventArgs e)
    {
         SubWindow sw = new SubWindow();
    
         //eg1: 将[方法]赋值给委托 【直接用方法赋值】
         sw.myDelegate = AddListView; 
    
         //eg2: 将[Lambda表达式]赋值给委托【Lambda表达式】
         sw.myDelegate = (a, b) =>
           {
               this.listView1.Items.Add(a);
               this.listView1.Items.Add(b);
           };
    
         //eg3: 将[委托]赋值给委托 【匿名委托】
         sw.myDelegate = delegate(a, b)
           {
               this.listView1.Items.Add(a);
               this.listView1.Items.Add(b);
           };
     }
    
     //和委托形参列表一致的方法
     public void AddListView(string item1,string item2)
     {
         this.listView1.Items.Add(item1);
         this.listView1.Items.Add(item2);
     }
    

      

    委托的用法就是这样的,现在我们来看一下事件 ,首先 声明  在委托的基础上才能声明事件

    //定义一个事件
    public event MyEvent myEvent;
    //调用事件
    myEvent(textBox1.Text,textBox2.Text);
    
    

    下面看事件的具体声明和使用

        //注册事件
       private void button1_Click(object sender, EventArgs e)
        {
            SubWindow sw = new SubWindow();
    
            //注册事件 方式一
            sw.myEvent += AddListView;
    
            //注册事件 方式二
            sw.myEvent += (a, b) =>
            {
                this.listView1.Items.Add(a);
                this.listView1.Items.Add(b);
            };
        }
    
        //和事件形参列表一致的方法
        public void AddListView(string item1, string item2)
        {
           this.listView1.Items.Add(item1);
           this.listView1.Items.Add(item2);
        }
    
    
        //声明了一个 具有两个string类型参数返回值为空 的委托类型
        public delegate void MyDelegate(string item1, string item2);
    
        public partial class SubWindow : Form
        {
    
            //定义一个事件
            public event MyEvent myEvent;
            
            //调用事件
            private void btnSure_Click(object sender, EventArgs e)
            {
                //调用事件
                myEvent(textBox1.Text, textBox2.Text);
            }
        }

      

    总结:事件就是委托。

  • 相关阅读:
    做过的笔试题
    (转)32位机器中int的字长
    JS_void()
    JS_增加事件,移除事件,动态元素的增删事件研究
    JS_animate 站在别人的肩膀上
    JS_对象的方法
    JS_Class.extend
    JS_返回值
    JS_eventBind
    JS_应用对象的复制
  • 原文地址:https://www.cnblogs.com/JourneyOfFlower/p/9512810.html
Copyright © 2011-2022 走看看