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

本人是初学菜鸟,有错误的地方欢迎大家指正。


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


事件如何定义

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值