4.事件_学习笔记

本文讲解C#中委托与事件的原理,事件作为委托限制器,以及事件的典型用法和安全特性。实例演示了如何在MyClass和MyForm中订阅和处理事件。
摘要由CSDN通过智能技术生成

学习视频链接:1.C# 的委托与事件大致是怎么一回事_哔哩哔哩_bilibili

2. 事件详解_1_哔哩哔哩_bilibili

1.事件不是委托!事件的本质是委托字段限制器,对外界隐藏了委托实例的大部分功能。
属性和事件类似,属性的本质是字段的限制器,所以属性对于字段,类似于事件对于委托。在代码层面,与属性相同,事件也会在声明时,附带两个索引器add和remove。(属性则是get、set)

事件一般的用法:事件一般是类中的成员,在类外的事件成员,只能添加和移除方法,无法被invoke,相对于委托成员,更加安全。由.net提供的事件,一般是(object sender,EventArgs args)形式,分别是事件的发送者和信息,其中EventHandler的泛型用于指定args的类型。


    public class MyClass
    {
        //如果是使用public delegate, 则外界可直接使用invoke,但事件不能被直接使用
        public event Action ValChangedEvent;//数值发生改变时,会触发该事件

        //.net提供了EventHandler 作为delegate
        //EventArgs 作为 args 用于提供信息
        //一般的事件都会有两个参数,分别是(object sender,EventArgs args),其中sender是发送信息者,args 是信息
        public event EventHandler<int> MessagePrinted01//命名一般是名词+动词ed,其中EventHandler的泛型是指定args的类型
        {
            add { }//类似于属性的get set
            remove { }
        }
        private int myVal;
        public int MyVal//一般事件的用法,
        {
            get { return myVal; }
            set { myVal = value;
                ValChangedEvent?.Invoke();//判空
            }
        }
    }

2.事件的订阅方式,  最常用:事件的拥有者是事件响应者的一个字段成员

using System;
using System.Windows.Forms;

namespace EventExample
{
    class Program	
    {
        static void Main(string[] args)
        {
            // 3.事件响应者 form
            var form = new MyForm();

            form.ShowDialog();
        }
    }

    class MyForm : Form
    {
        private TextBox textBox;
        // 1.事件拥有者 button
        private Button button;

        public MyForm()
        {
            this.textBox = new TextBox();
            this.button = new Button();

            this.Controls.Add(this.button);
            this.Controls.Add(this.textBox);
            // 2.事件成员 Click 5.事件订阅 +=
            this.button.Click += this.ButtonClicked;
        }

        // 4.事件处理器
        private void ButtonClicked(object sender, EventArgs e)
        {
            this.textBox.Text = "Hello, World!!!!";
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值