您的位置:首页 > 编程语言 > C#

新手菜鸟学习C#的笔记总结 之事件

2014-01-27 15:34 465 查看
本人是初学菜鸟,有错误的地方欢迎大家指正。

什么是事件:事件可以看出委托的另一种方式,可以理解成某事件发生时的通知方式。事件—>委托-----方法一,方法二,方法三

事件如何定义

1,定义一个事件发生时关联的委托

 2,用这个委托定义一个事件。

public delegate void MoveDelgate(object source,string info);

public event MoveDelgate MoveEven;


事件如何使用

     1,编写触发事件的方法。(事件触发程序)

     2,编写触发事件后要实现的方法。(事件处理程序)

     3,将事件处理方法加入事件存储器。(事件+=方法名)

     4,触发(调用)  事件触发程序。(方法调用)

namespace NewTest
{
public delegate void MoveDelgate(object source,string info);
class Person
{
public event MoveDelgate MoveEven;
public string info = "I'm Person";
public void Touch(object source)//触发事件的方法
{
if (source != null)
{
MoveEven(source,info);
}
}
}
class Touched
{
public void say(object source,string info)//事件处理程序
{
Console.WriteLine(info+"\n"+"触发我的是"+"\n"+source.GetType());
}
}
}

namespace NewTest
{
class Program
{
static void Main(string[] args)
{
Person Zhang = new Person();
Touched T=new Touched();
Zhang.MoveEven += T.say;//将方法加入事件存储器
Zhang.Touch(T);//调用事件触发方法。
}
}
}
输出结果

I'm Person

触发我的是

NewTest.Touched

事件的注意点和规范

1,事件的修饰符可以是new sealed  ||  public protected internal private   访问修饰符

  override abstract static virtual   只能使用这行中的一个,其中用了abstract不能用访问修饰符

(ps:这些除了访问修饰符,其他的修饰符与事件搭配怎么用呢?)

  2,一般事件委托的定义为 public delegate void xxxEvenHandle(object source,EventArgs s);其中返回值总是void,source指出触发源,s指其他信息。

  3,事件有存取器件。

 4,事件的重写,感觉主要好像是重写事件触发方法,重写触发方法时好像必须重写事件(书上好像没有,我自己试了一下,不知道对不对),程序如下:

public delegate void MoveDelgate(object source,string info);
public delegate void MoveEventDelgate(object source);
class Person
{
public virtual event  MoveDelgate MoveEven;
public string info = "开始移动";
public virtual void Touch()
{
if (info != null)
{

MoveEven(this,info);
}
}
}
class Touched
{
public void say(object source,string info)
{
Console.WriteLine(info+"\n"+"触发我的是"+"\n"+source.GetType());
}
}
class Student : Person
{
public override event MoveDelgate MoveEven;//重写事件
public override void Touch()//重写触发事件的方法
{
if ( info!= null)
{
Console.WriteLine("重写触发方法");
MoveEven(this,info);
}
}
}
class Program
{
static void Main(string[] args)
{
Person Zhang = new Person();
Touched T=new Touched();
Student My = new Student();
Zhang.MoveEven += T.say;
Zhang.Touch();
Console.WriteLine();
My.MoveEven += T.say;
My.Touch();

}
}
输出结果:

开始移动
触发我的是
NewTest.Person

重写触发方法
开始移动
触发我的是
NewTest.Student
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# 事件