博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#事件浅淡(1)
阅读量:6484 次
发布时间:2019-06-23

本文共 3774 字,大约阅读时间需要 12 分钟。

最近在写C#,感觉事件这个机制很好,可是怎么实现自己定义的事件呢?查了资料有的不全有的不完整,有的太深,自己写一个简单的例子。

原则

1,定义一个事件信息类(标准的都继承EventArgs)

2、定义一个委托(标准的是EventHandler结尾),可以写在命名空间里,类里都行,区别自己查

3、就是定义一个此委托下的一个事件了。

4、事件调用方法(也就是何种情况下调用这个事件,一般都叫On方法,多以On开头)

5、用户处理方法,(一般这个不在事件类里面)

1和2可以没有,下一文章再讲,这里讲一个完整的流程

(1)、定义消息类

1  public class PersonEventArgs : EventArgs 2     { 3  4         private int oldAge; 5  6         public int OldAge 7         { 8             get { return oldAge; } 9         }10         public PersonEventArgs(int age)11         {12             this.oldAge = age;13         }14 15     }

 

(2,3,4)、定义事件类

1  public delegate void PersonEventHandler(object sender, PersonEventArgs e); 2     ///  3     /// '************************************************ 4     /// //'◇作者:李阳阳 5     /// //'◇小组:无 6     /// //'◇说明:事件测试类 7     /// //'◇版本号:V1.0.0 8     /// //'◇创建日期:2016/5/10 8:04:51 9     /// ///'*************************************************10     /// 11     public class Person12     {13         public event PersonEventHandler AgeChanged;14 15         protected virtual void OnAgeChanged(PersonEventArgs e)16         {17             if (AgeChanged != null)18             {19                 AgeChanged(this, e);20             }21         }22 23         private string name;24         public string Name25         {26             get { return name; }27             set { name = value; }28         }29         private int age;30 31         public int Age32         {33             get { return age; }34             set35             {36                 if (age != value)37                 {38                     int orage = age;39                     age = value;40                     OnAgeChanged(new PersonEventArgs(orage));41                 }42             }43         }44 45         public void AddAge(int icrAge)46         {47             int orage = age;48             age += icrAge;49             OnAgeChanged(new PersonEventArgs(orage));50         }51 52         public override string ToString()53         {54             return string.Format("Name:{0}\t Age:{1}", name, age);55         }56         public Person()57         {58             name = "";59             age = 0;60         }61 62         public Person(string name, int age)63         {64             this.name = name;65             this.age = age;66             // author : lyy : 2016/5/10 8:14:3667             // last change : 68             /// 说明:  可以再这个地方添加一些预处理事件69             //   this.AgeChanged += new PersonEventHandler(Person_AgeChanged);70 71         }72 73         void Person_AgeChanged(object sender, PersonEventArgs e)74         {75             this.name = "我的名了没有变:" + name;76             //throw new NotImplementedException();77         }78     }

 

(5)事件类的应用

1  static void Main(string[] args) 2         { 3             Person p = new Person("sb", 24); 4             Console.WriteLine(p.ToString()); 5             p.AgeChanged += new PersonEventHandler(p_AgeChanged); 6             string a = Console.ReadLine(); 7             p.AddAge(int.Parse(a)); 8  9             Console.WriteLine(p.ToString());10             Console.Read();11         }12 13         static void p_AgeChanged(object sender, PersonEventArgs e)14         {15             Console.WriteLine("我手动修改了年龄");16             Person ptemp = sender as Person;17             // author : lyy : 2016/5/10 8:18:5018             // last change : 19             /// 说明: 为了看到效果我们在事件操作中再次更改年龄的值20             Console.WriteLine(string.Format("增加后的年龄{0}", ptemp.Age));21           22             Random rd = new Random(2);23 24             ptemp.Age = rd.Next(0,100);25             Console.WriteLine(string.Format("我在事件中又修改了年龄{0}",ptemp.Age));26          //   throw new NotImplementedException();27         }

6,结果如图:

转载于:https://www.cnblogs.com/ants_double/p/5476509.html

你可能感兴趣的文章
Apache Hama 现支持 Hadoop YARN
查看>>
New AppCode 2016.2.3 EAP,集成开发环境
查看>>
nginx重启脚本
查看>>
理解Linux系统/etc/init.d目录和/etc/rc.local脚本
查看>>
代码整洁之道
查看>>
svm 预测标签的概率输出
查看>>
SDK目录结构
查看>>
ActiveMQ(25):优化与建议
查看>>
使用Intelij Idea经过的坑
查看>>
微信 token
查看>>
【原创】JAVA通过过滤器防止脚本注入
查看>>
马哥linux第8周作业
查看>>
gnu autotools
查看>>
remote: Invalid username or password.
查看>>
在AIX上增加文件系统空间
查看>>
svchost cpu占用率过高电脑卡死
查看>>
【中小企业经典案例分析一】基础架构描述
查看>>
Android进程间通信(IPC)机制Binder简要介绍和学习计划
查看>>
在git@osc上托管自己的代码
查看>>
Training的第五天
查看>>