简单理解和使用 C# 委托与事件

本文详细介绍了委托和事件的概念及用法。委托是一种引用类型,用于封装方法的引用;事件则是基于委托的一种机制,用于实现发布-订阅模式。文章通过实例展示了如何声明、使用委托和事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

委托和事件

委托:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值