Net中事件的用法之二

1.委托与事件的区别 

事件对权限做了控制
  1.委托可以直接调用
  事件不可以直接调用
  2.委托允许外面直接赋值
  事件不允许外面直接赋值

2.事件与委托的实例比较

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyEvent
{
    //委托的声明
    public delegate void DoSometing();

    /// <summary>
    ///  委托与事件的关系
    ///  委托是一种类型
    ///  事件是委托的一个实例
    /// </summary>
    public class MyEvent
    {
        public DoSometing doSomethingDelegate;//委托的一个变量
        public event DoSometing doSomethingEvent;//一个事件,就是委托的一个变量,加上了event关键字
        //事件的使用
        public void InvokeEvent()
        {
            Console.WriteLine("------------InvokeEvent------------");
            if (doSomethingEvent != null)
            {
                doSomethingEvent();
            }
        }
        public void InvokeDelegate()
        {
            Console.WriteLine("------------InvokeDelegate------------");
            if (doSomethingDelegate != null)
            {
                doSomethingDelegate();
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyEvent
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("欢迎来到流星小子博客学习");
            MyEvent myEvent = new MyEvent();
            myEvent.doSomethingEvent += ShowSomething;//为事件实例化
            myEvent.doSomethingEvent += ShowSomething;//为事件实例化
            //事件不可以直接调用
            //myEvent.doSomethingEvent();
            //事件不允许外面直接赋值
            //myEvent.doSomethingEvent = ShowSomething;
            myEvent.doSomethingEvent += ShowSomething;//为事件实例化
            myEvent.doSomethingEvent += ShowSomething;//为事件实例化
            myEvent.doSomethingEvent -= ShowSomething;//为事件实例化
            myEvent.InvokeEvent();//触发事件

            myEvent.doSomethingDelegate += ShowSomething;
            myEvent.doSomethingDelegate += ShowSomething;
            myEvent.doSomethingDelegate += ShowSomething;
            //委托可以直接调用
            myEvent.doSomethingDelegate();
            //委托允许外面直接赋值
            myEvent.doSomethingDelegate = ShowSomething;

            myEvent.doSomethingDelegate += ShowSomething;
            myEvent.doSomethingDelegate -= ShowSomething;
            myEvent.InvokeDelegate();
            Console.Read();
        }
        private static void ShowSomething()
        {
            Console.WriteLine("ShowSomething");
        }
    }
}
时间: 2024-10-16 22:08:43

Net中事件的用法之二的相关文章

Net中事件的用法之一

1.事件与委托的关系 委托是一种类型 事件是委托的一个实例 2.事件的实例说明 namespace MyEvent { //委托的声明 public delegate void DoSometing(); /// <summary> /// 委托与事件的关系 /// 委托是一种类型 /// 事件是委托的一个实例 /// </summary> public class MyEvent { public DoSometing doSomethingDelegate;//委托的一个变量

flex中dispatchEvent的用法(自定义事件) .

Evevt和EventDispatcher类在as3的事件机制中是很重要的角色,dispatchEvent()是EventDispatcher类的一个事件发送方法,它可以发送出Event类或其子类的实例,在as3中所有的显示对象都可以发送事件,因为as3中所有的显示对象都是EventDispatcher子类DisplayObject的实例. 发送事件有三种方式:继承EventDispatcher,如sprite等显示对象.复合EventDispatcher或其子类.实现IEventDispatc

[学习总结]5、Android的ViewGroup中事件的传递机制(二)

下面是第一篇的连接 Android的ViewGroup中事件的传递机制(一) 关于onInterceptTouchEvent和onTouchEvent的详细解释. 1 public class MainActivity extends Activity { 2 Group1 group1; 3 Group2 group2; 4 MyTextView myTv; 5 6 /** Called when the activity is first created. */ 7 @Override 8

jQuery中事件绑定

一.前言 最近在做项目中要用到jQuery来绑定事件,首先想到的是$(selector).事件名();这样绑定事件的方式,这种方式对事件进行绑定其实也就是bind()方法,但当选择器匹配的元素过多,$(selector).事件名();对每个元素进行迭代绑定,会影响性能.除了这种方式可以绑定事件以外,还有live()(已过期).delegate().on()方法绑定事件,接下来分析一下它们的区别,以及使用哪种方式最值得推荐.由于live()方法已过期,只分析另外三种,欢迎拍砖.吐槽~~~ 二.用法

JS中事件代理与委托

在javasript中delegate这个词经常出现,看字面的意思,代理.委托.那么它究竟在什么样的情况下使用?它的原理又是什么?在各种框架中,也经常能看到delegate相关的接口.这些接口又有什么特殊的用法呢?这篇文章就主要介绍一下javascript delegate的用法和原理,以及Dojo,jQuery等框架中delegate的接口. JavaScript事件代理 首先介绍一下JavaScript的事件代理.事件代理在JS世界中一个非常有用也很有趣的功能.当我们需要对很多元素添加事件的

[学习总结]4、Android的ViewGroup中事件的传递机制(一)

本文主要针对dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent三个方法,通过简单的例子来简单的介绍下. 根据字面意思的理解,dispatchTouchEvent分发触摸事件,onInterceptTouchEvent拦截触摸事件,onTouchEvent触摸事件.正如它们各自的字面意思,下面简单的列出各自的作用和用法. 1.dispatchTouchEvent作用:决定事件是否由onInterceptTouchEvent来拦截处理. 返回s

[转载]js中return的用法

一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return;  在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个元素,页面会跳转到该元素href属性指定的页.    Return False 就相当于终止符,Return True 就相当于执行符.    在js中return false的作用一般是用来取消默认动作的.比如你单击一个链接除了触发

VC++ 浅谈VS2010中CMFCToolBar的用法

本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToolBarImages对象设置进去,由所有CMFCToolBar对象共享. AD: 自从VS2008中增加了一些特性的菜单,但这些特性在帮助中说明的很少,给使用者造成了很多麻烦.笔者经过搜索以及自己的摸索,对其的用法有了初步了解,形成本文,如果能够为后来者解决一些问题,笔者将会感到欣慰. 一.向导自动

mysql中event的用法详解

一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程. 二.适用范围对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理. 例如:使用event在每月的1日凌晨1点自动创建下个月需要使用的三张表. 三.使用权限单独使用event调用SQL语句时,查看和创建