简单理解和使用 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);
        }
    }

  

总结:事件就是委托。

原文地址:https://www.cnblogs.com/JourneyOfFlower/p/9512810.html