CLR笔记:10.事件

事件也是方法。

定义一个事件成员意味着类型具有三种能力:

*类型的静态方法/实例方法可以订阅类型事件

*类型的静态方法/实例方法可以注销类型事件

*事件发生时通知已订阅事件的方法

.NET2.0的事件仍然是基于Win32的,只不过使用了Observer模式来实现,同时建立在Delegate机制之 上。

事件的设计步骤如下(基本上是Observer的实现步骤):

10.1 设计一个对外提供事件的类型

1.定义EventArgs或子类,用于存放附加信息:

定义一个类,继承于EventArgs,以EventArgs结束,包含一组私有字段以及相应的只读公共属性。

    public class NewMailEventArgs : EventArgs

    {

        private string from;

        public string From

        {

            get { return from; }

        }

    }

这里,EventArgs基类在FCL中是这个样子的:

     [Serializable]

    [ComVisible(true)]

    public class EventArgs

    {

        // Summary:

        //     表示没有事件数据的事件。

        public static readonly EventArgs Empty;

        public EventArgs();

    }

大多数事件没有附加数据,那么就不用定义任何私有字段和属性,直接使用EventArgs基类作为参数。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法
, 事件
, 类型
, public
, 字段
私有
,以便于您获取更多的相关知识。

时间: 2024-08-02 15:39:30

CLR笔记:10.事件的相关文章

CLR笔记系文章目录索引

CLR笔记:18.可空值类型 CLR笔记:17.自定义属性 CLR笔记:16.泛型 CLR笔记:15.委托 CLR笔记:14.接口 CLR笔记:13.数组 CLR笔记:12.枚举类型和位标志 CLR笔记:11.字符串 CLR笔记:10.事件 CLR笔记:9.Property CLR笔记:8.方法 CLR笔记:7.常量和字段 CLR笔记:6.类型和成员基础 CLR笔记:5.基元,引用和值类型 CLR笔记:4.类型基础 CLR笔记:3.共享程序集合强命名程序集 CLR笔记:2.生成,打包,部署,管理

操作系统概念学习笔记 10 CPU调度

操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU,操作系统可以提高计算机的吞吐率. 对于单处理器系统,每次只允许一个进程运行:任何其他进程必须等待,直到CPU空闲能被调度为止. 多道程序的目标是在任何时候都有某些进程在运行,以使CPU的使用率最大化.多道程序的思想较为简单,当一个进程必须等待时,操作系统会从该进程拿走CPU的使用权,而将CPU交给其他进程. CPU-I/O 区间周期 CPU的成功调度依赖于进程的如下属性: 进程执行由CPU执行周期和I/O等

thinkphp学习笔记10—看不懂的路由规则

原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂.   1.路由定义 要使用路由功能需要支持PATH_INFO,PATH_INFO是什么呢?手册中提到"要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能)," , url支持path_info,不是apache要支持path_info么,度娘讲的还算清楚一点,见下文: p

Dreamweaver构建Blog全程实录(10):事件日历

dreamweaver|日历 第十章  BLOG事件日历的实现 既然Doking's BLOG是学习笔记,那么按日历可以查出所有笔记和笔记回复. 难点分析:是不是要在模板中直接添加Calendar日历控件?不!那是不行的!由于Calendar日历控件是服务器控件,要在含有runat="server"表单该服务器控件,但一页面中只能有一个含有runat="server"表单,不然有时会出现如图10-1所示的错误显示. 图10-1  页面只能有一个含有runat=&qu

CLR笔记:14.接口

CLR以及所有托管语言都不支持多继承,通过接口模拟实现 14.1 类和接口的实现 接口定义:为一组方法签名指定一个名称的方式. 类实现接口,就一定要提供接口所有方法的实现. 即使抽象类,也要全部实现,但是,它可以把接口方法声明为abstract的,从而把这个接口方法留给 派生类去实现,如下: public interface ITest { void Test(); } public abstract class AbstractClass : ITest { public abstract v

CLR笔记:9.Property

属性分两种,无参属性,有参属性,后者又叫索引器(indexer)--VB.NET中相应为默认属性. 1.无参属性 CLR支持静态属性,实例属性,抽象属性,虚拟属性,但不能被重载. 属性在MSIL中生成以下内容: get_XX方法,当在属性中定义了get的时候--XX为属性名 set_XX方法,当在属性中定义了set的时候--XX为属性名 一个位于原数据中的属性定义. 属性不能作为out/ref传递给方法,字段则可以. 如果属性中执行语句过多,要花很多时间,这时候优先选用方法.例如线程同步和Rem

CLR笔记:7.常量和字段

1.常量 常量是永远不会改变的符号.它的值必须在编译时就确定.编译后,CLR将常量的值保存在Assembly的 元数据中,这意味着常量必须是基元类型. 常量是类型的一部分,总是被当成静态成员,但并不显示声明为static. public const Int32 MaxEntriesList = 100; 当代码引用常量时,CLR在元数据中查找该符号,将提取的常量值嵌入到IL中,所以常量没有地址以及 相应的分配内存,而且不能通过引用传递变量,也就是说,在导入一个外部的DLL时,就已经将其中的常 量

CLR笔记:6.类型和成员基础

1.Class的可见性有public和internal两种,public对所有程序集都可见,internal仅对其所在的程序 集可见.默认是public的. 2.友元程序集, 使用friend assembly可以实现单元测试,而不使用反射技术. 书上讲的是按照命令行编译. 我测试用的是vs2005的solution,如下: 3.成员的可访问性 成员默认是private的,接口类型的成员都是public的. 子类重写父类的成员时,原始成员与重写成员要有相同的可访问性--C#的约束:CLR的约束是

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>

Caliburn.Micro学习笔记目录 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以做到对广播做到统一的管理 对象实现IHand<T>接口后通过EventAg