C#入门详解(11)

Posted jingjingweixiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#入门详解(11)相关的知识,希望对你有一定的参考价值。

事件的应用

实例演示

派生与拓展

事件模型的五个组成部分

1,事件的拥有者(event source,对象)

2,事件成员(event,成员)

3,事件的响应者(event subscriber,对象)

4,事件处理器(event handler,成员)-----本质上是一个回调方法

5,事件回调------把事件处理器与事件关联在一起,本质上是一种以委托类型为基础的约定

注意

事件处理器是成员方法

挂接事件处理器的时候,可以使用委托类型,也可以直接使用方法名,这是个语法糖

事件处理器对事件的订阅不是随意的,匹配与否由声明事件时所使用的委托类型来检测

事件可以同步调用也可以异步调用

事件的各种模型

事件的拥有者 订阅 事件的响应者

 class Program
    
        static void Main(string[] args)
        
            System.Timers.Timer timer = new System.Timers.Timer();//事件的拥有者

            timer.Interval = 1000;

            Boy boy = new Boy();//事件的响应者

            //Elapsed为事件 Action为事件处理器
            timer.Elapsed += boy.Action;//订阅操作

            timer.Start();
           
    

    class Boy
    
        internal void Action(object sender, ElapsedEventArgs e)
        
            Console.WriteLine("Jump");
        
    

事件的拥有者和事件响应者不相同

  static class Program
    
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
            Form form = new Form();
            Controller control = new Controller(form);
            form.ShowDialog();
        
    
    public class Controller
    
        private Form form;

        public Controller(Form form)
        
            if (form!=null)
            
                this.form = form;
                this.form.Click += this.ShowTime;
            
        

        private void ShowTime(object sender, EventArgs e)
        
            this.form.Text = DateTime.UtcNow.ToString();
        
    

事件的拥有者和事件的响应者是同一个对象

    static class Program
    
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());

            MyForm form = new MyForm();
            form.Click += form.Clicked;
            form.ShowDialog();
        
    

    public class MyForm : Form
    
        internal void Clicked(object sender, EventArgs e)
        
            this.Text = DateTime.UtcNow.ToString();
        
    

事件的拥有者是事件响应者的字段成员,事件的响应者用自己的方法订阅着自己字段成员的事件

 static class Program
    
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
            Button button = new Button();
            TextBox textBox = new TextBox();
            MyForm myForm = new MyForm(button, textBox);
            myForm.ShowDialog();
          
        
    

    public class MyForm : Form
    
        private Button Button;
        private TextBox TextBox;
        public MyForm(Button button,TextBox textBox)
        
            this.Button = button;
            this.TextBox = textBox;
            this.Controls.Add(this.Button);
            this.Controls.Add(this.TextBox);
            this.Button.Text = "Click Me";
            this.Button.Top = 100;
            this.Button.Click += this.showMessage;
        

        private void showMessage(object sender, EventArgs e)
        
            this.TextBox.Text = "233333";
        
    

 

以上是关于C#入门详解(11)的主要内容,如果未能解决你的问题,请参考以下文章

《C#零基础入门之百识百例》(八十三)ArrayList数组列表详解 -- 代码示例

C#入门详解

《C#零基础入门之百识百例》(八十三)系统类ArrayList数组列表详解 -- 代码示例

2022年最新C#入门教程详解

C#入门视频教程,C#语言入门详解,限时免费领取!

C#入门详解