zoukankan      html  css  js  c++  java
  • 委托和事件的使用

    自定义类:webcyz 包括[属性,虚方法,事件,自定义委托]

    webcyz的派生类:重载了虚方法,截获事件触发,提前完成自定义代码.

    其中事件参数 类:EventArgs //所有事件参数类的基类.

    //代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace 委托
    {

        
    class webcyz
        {
            
    /// <summary>
            
    /// 定义一个私有的字符串.
            
    /// </summary>
            private string _text = "";
            
            
    /// <summary>
            
    /// 定义一个字符串属性Text.(访问属性为:public)
            
    /// </summary>
            public string Text
            {
                
    get { return _text; }
                
    set 
                {
                    _text 
    = value;
                    
    this.OnTextChange(new EventArgs());
                }
            }

            
    /// <summary>
            
    /// 定义一个委托类型,用于调度字符串Text变化后方法调用的机制
            
    /// </summary>
            
    /// <param name="sender">调用者</param>
            
    /// <param name="e">事件参数</param>
            public delegate void my_del_for_change_text(object sender, EventArgs e);


            
            
    /// <summary>
            
    /// 用委托声明一个事件
            
    /// </summary>
            public event my_del_for_change_text Changed;

            
    /// <summary>
            
    /// 定义一个虚方法,用于触发事件.
            
    /// </summary>
            
    /// <param name="e">传递事件参数e</param>
            public virtual void OnTextChange(EventArgs e)
            {
                
    if (Changed != null)
                {
                    
    this.Changed(this, e); 
                }
            }



        }
        
        
        
    class Program
        {
            
    /// <summary>
            
    /// 定义webcyz的派生类.
            
    /// </summary>
            class MyClass:webcyz
            {
                
    /// <summary>
                
    /// 重载了虚方法,从而截获事件的调用.
                
    /// </summary>
                
    /// <param name="e"></param>
                public override void OnTextChange(EventArgs e)
                {
                    System.Windows.Forms.MessageBox.Show(
    "虚函数重载");
                    
    base.OnTextChange(e);
                }
            }

            
    static void Main(string[] args)
            {
                MyClass test 
    = new MyClass();//实例化一个自定义类的子类实例.
                test.Changed += new webcyz.my_del_for_change_text(test_Changed);//给事件绑定方法.
                test.Text = "1";//改变数据.测试触发事件.
                Console.WriteLine(test.Text);//显示对象的Text属性值.
                Console.ReadKey();

            }

            
    static void test_Changed(object sender, EventArgs e)
            {
                System.Windows.Forms.MessageBox.Show(
    "事件的处理");
                
    //throw new NotImplementedException();
            }

            

        }
    }
  • 相关阅读:
    Git出现error: Your local changes to the following files would be overwritten by merge: ... Please, commit your changes or stash them before you can merge.的问题解决(Git代码冲突)
    JDK内置工具jstack(Java Stack Trace)(转)
    Java 5/Java 6/Java7/Java 8新特性收集
    Linux使用screen实现关闭ssh连接的情况下,让程序继续在后台运行
    Linux出现cannot create temp file for here-document: No space left on device的问题解决
    解决树莓派8G的SD卡只能识别3.3G,SD卡扩容
    Windows下拷贝Linux的文件到本地(Putty)
    Linux下运行Java项目时,出现No X11 DISPLAY variable was set, but this program performed an operation which requires it.的问题解决
    Maven错误 diamond operator is not supported in -source 1.5 (use -source 7 or higher to enable diamond operator)问题解决
    Ubuntu下安装Maven
  • 原文地址:https://www.cnblogs.com/webcyz/p/1941595.html
Copyright © 2011-2022 走看看