event(C# 参考)

event 关键字用于在发行者类中声明事件。
下面的示例演示如何声明和引发将 EventHandler 用作基础委托类型的事件。

C#

public class SampleEventArgs
{
public SampleEventArgs(string s) { Text = s; }
public String Text {get; private set;} // readonly
} public class Publisher
{
// Declare the delegate (if using non-generic pattern).
public delegate void SampleEventHandler(object sender, SampleEventArgs e); // Declare the event.
public event SampleEventHandler SampleEvent; // Wrap the event in a protected virtual method
// to enable derived classes to raise the event.
protected virtual void RaiseSampleEvent()
{
// Raise the event by using the () operator.
if (SampleEvent != null)
SampleEvent(this, new SampleEventArgs("Hello"));
}
}

事件是特殊类型的多路广播委托,仅可从声明它们的类或结构(发行者类)中调用。如果其他类或结构订阅了该事件,则当发行者类引发该事件时,会调用其事件处理程序方法。

事件可标记为 public、private、protected、internal 或 protectedinternal。这些访问修饰符定义类的用户访问事件的方式。

下面的关键字可应用于事件:
static 即使类没有实例,调用方也能在任何时候使用该事件。 静态类和静态类成员(C# 编程指南)
virtual 允许派生类通过使用 override 关键字来重写事件行为。 继承(C# 编程指南)
sealed 指定对于派生类它不再属虚拟性质。
abstract 编译器不会生成 add 和 remove 事件访问器块,因此派生类必须提供自己的实现。
说明:
通过使用 static 关键字,可以将事件声明为静态事件。即使类没有任何实例,调用方也能在任何时候使用静态事件。
通过使用 virtual 关键字,可以将事件标记为虚拟事件。这样,派生类就可以通过使用 override 关键字来重写事件行为。
重写虚事件的事件也可以为 sealed,以表示其对于派生类不再是虚事件。最后,可以将事件声明为 abstract,这意味着编译器不会生成 add 和 remove 事件访问器块。因此派生类必须提供其自己的实现。

event 关键字的更多相关文章

  1. C# event关键字

    直接使用委托的写法,如下: using System; namespace ConsoleAppTest { class Program { class Test { static void Main ...

  2. 编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护

    建议40:使用event关键字为委托施加保护 在建议中我们实现了一个具有通知功能的文件传输类,如下: class FileUploader { public delegate void FileUpl ...

  3. C# 关键字Event

    1>>> 在委托实例前,不加event,那这个委托就是一个普通的委托,我们可以用别的函数调用,也可以直接用对象调用,但加上关键字之后,只能用成员函数调用 public delegat ...

  4. Event,delegate,handler之间的关系

    在C#或者说.Net的事件处理机制中,有三个关键的概念 - 事件(Event),委托(Delegate)和处理器(Handler),另外在面向对象的背景中,还有另外两个概念 - 发送者(Sender) ...

  5. 常用C#关键字详解教程

    很多在学习网站后台的同学都对C#的关键字有些摸不到头脑,现在就和大家一起学习一下这些关键字的含义 类型 Void 用作方法的返回类型时,void 关键字指定方法不返回值. 在方法的参数列表中不允许使用 ...

  6. C#中Delegate和Event以及它们的区别(转载)

    一.Delegate委托可以理解为一个方法签名. 可以将方法作为另外一个方法的参数带入其中进行运算.在C#中我们有三种方式去创建委托,分别如下: public delegate void Print( ...

  7. 【温故知新】c#事件event

    从上一篇文章[温故知新]C#委托delegate可知,委托delegate和事件Event非常的相似,区别就是event关键字,给delegate穿上了个“马甲”. 让我们来看官方定义: 类或对象可以 ...

  8. Delegate&Event

    Delegate 1.基本类: public class Student { public int Id { get; set; } public string Name { get; set; } ...

  9. 委托和事件[delegate and event]_C#

    委托和事件: 1. 委托:一个能够表示方法的数据类型:它将方法作为对象封装起来,允许在运行时间接地绑定一个方法调用. 2. 声明委托数据类型: public delegate  bool Greate ...

随机推荐

  1. 2015GitWebRTC编译实录3

    2015.05.17 librtprtcp 编译通过[702/1600 ] CXX obj /webrtc/modules/rtp_rtcp/source/rtp_rtcp.bitrate.o[703 ...

  2. CSS控制文本自动换行

    1.你定死表格的宽度,即给表格一个宽度值(是数值,不是百分比) 2.强制不换行 div{ //white-space:不换行;normal 默认;nowrap强制在同一行内显示所有文本,直到文本结束或 ...

  3. ZOJ-3870 Team Formation

    题目大意:给n个正数,找出满足A^B>max(A,B)的对数. 题目分析: 代码如下: # include<iostream> # include<cstdio> # i ...

  4. 论文笔记之:Fully-Convolutional Siamese Networks for Object Tracking

    gansh Fully-Convolutional Siamese Network for Object Tracking 摘要:任意目标的跟踪问题通常是根据一个物体的外观来构建表观模型.虽然也取得了 ...

  5. 论文笔记之:Attention For Fine-Grained Categorization

    Attention For Fine-Grained Categorization Google ICLR 2015 本文说是将Ba et al. 的基于RNN 的attention model 拓展 ...

  6. COM ,Threading Models,apartments,RPC

    Component Object Model (COM) https://msdn.microsoft.com/en-us/library/windows/desktop/ms680573%28v=v ...

  7. Docker Resources

    Menu Main Resources Books Websites Documents Archives Community Blogs Personal Blogs Videos Related ...

  8. 整合UMDH结果的一个小工具

    ua.exe使用方法: 1.将UMDH生成的logcompare.txt改名为1.txt,内容示例: // Debug library initialized ... DBGHELP: moxia_d ...

  9. Java基础试题

      1.使用Java语言编写的源程序保存时的文件扩展名是( B ). (A).class          (B).java            (C).cpp            (D).txt ...

  10. shell之here文档

    http://www.cnblogs.com/xiangzi888/archive/2012/03/24/2415077.html在shell脚本程序中,向一条命令传递输入的一种特殊方法是使用here ...