【C#】面向对象多态06---事件

一、什么是事件?

答:是委托的另一种用法,是一种设计模式,一种被event关键字修饰的特殊方法,或者 方法的返回值类型是委托类型为事件

二、为什么使用事件?

答:用来实现任意两个或多个方法的联动调用,即某个方法自动会调用另一个方法,与委托的多播执行类似,但实现方法不同

三、什么时候使用事件?

答:需要方法(行为,功能)之间有关联时可用

四、用C#实现事件

步骤1:先定义一个委托类型
步骤2:定义事件(定义端 ) -- public event【可省略】 委托类型 事件名

b:创建一个事件源类,再定义一个事件方法

步骤3:注册事件(调用端)--事件源对象.事件+=new 委托类型(响应方法)

c:先创建一个响应者类,再创建一个响应方法

d:创建响应方法后就在调用端注册

步骤4:触发事件(定义端)-- 事件在类内部触发,触发代码与委托调用一样

e:在事件源内写一个自定义方法(签名与委托相同),用于触发事件方法

步骤5:用对象或类直接调用触发事件

f:在调用端,调用事件,有参数就传递参数

调用事件的结果

注意事项:

+=是表示注册事件,-=表示注销事件。

事件源为定义事件的类,响应者为被触发的方法所在的类。

事件源也可以是响应者。

完整代码

 public delegate void oneUse(string name);   //委托
    
    public class My              //定义端(事件源
    {
        public event oneUse hit;           //定义一个事件方法
        public void Hit_action(string name) //触发事件方法,同时实现事件方法,固定格式
        {
            if(hit != null)
            {
                Console.WriteLine("挥拳打击{0}", name);
                hit(name);                     //触发事件代码
            }
        }
        
    }
    public class You                //响应者
    {
        public static void Dead(string name)     //响应方法,与事件方法的委托类型的签名一样
        {
            Console.WriteLine("{0}死亡",name);
        }
    }

    public class MainTest               //调用端
    {
        static void Main(string[] ares)
        {
            My me = new My() ;
            me.hit += new oneUse(You.Dead);//注册事件,要求注册的方法与委托签名一样
            me.Hit_action("张三");          //调用事件,      
        }
    }  

五、事件的特点

  1. 方法是偶尔触发的,对其他方法有影响,事件发生后,其他对象做出响应

  1. 可用约束“调用委托”,起到保护作用,防止委托存储的方法被多次调用所产生的冲突

六、小结

事件就是方法触发另一个方法的操作,就是使用步骤比较麻烦,在unity软件中,它自身已经创建好了一些事件,可以直接调用。看到这里,不难发现,面向对象的多态,比如继承,方法重写,隐藏,接口,委托,事件等,都是对方法的使用进行不同操作,这些都是一个个技术手段,所以开发过程中,手段只是工具,真正重要的是运用手段的思路,想法

猜你喜欢

转载自blog.csdn.net/ICD_kfg/article/details/129779657