event 关键字
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 关键字的更多相关文章
- C# event关键字
直接使用委托的写法,如下: using System; namespace ConsoleAppTest { class Program { class Test { static void Main ...
- 编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护
建议40:使用event关键字为委托施加保护 在建议中我们实现了一个具有通知功能的文件传输类,如下: class FileUploader { public delegate void FileUpl ...
- C# 关键字Event
1>>> 在委托实例前,不加event,那这个委托就是一个普通的委托,我们可以用别的函数调用,也可以直接用对象调用,但加上关键字之后,只能用成员函数调用 public delegat ...
- Event,delegate,handler之间的关系
在C#或者说.Net的事件处理机制中,有三个关键的概念 - 事件(Event),委托(Delegate)和处理器(Handler),另外在面向对象的背景中,还有另外两个概念 - 发送者(Sender) ...
- 常用C#关键字详解教程
很多在学习网站后台的同学都对C#的关键字有些摸不到头脑,现在就和大家一起学习一下这些关键字的含义 类型 Void 用作方法的返回类型时,void 关键字指定方法不返回值. 在方法的参数列表中不允许使用 ...
- C#中Delegate和Event以及它们的区别(转载)
一.Delegate委托可以理解为一个方法签名. 可以将方法作为另外一个方法的参数带入其中进行运算.在C#中我们有三种方式去创建委托,分别如下: public delegate void Print( ...
- 【温故知新】c#事件event
从上一篇文章[温故知新]C#委托delegate可知,委托delegate和事件Event非常的相似,区别就是event关键字,给delegate穿上了个“马甲”. 让我们来看官方定义: 类或对象可以 ...
- Delegate&Event
Delegate 1.基本类: public class Student { public int Id { get; set; } public string Name { get; set; } ...
- 委托和事件[delegate and event]_C#
委托和事件: 1. 委托:一个能够表示方法的数据类型:它将方法作为对象封装起来,允许在运行时间接地绑定一个方法调用. 2. 声明委托数据类型: public delegate bool Greate ...
随机推荐
- 150. Evaluate Reverse Polish Notation
Valid operators are +, -, *, /. Each operand may be an integer or another expression. Some examples: ...
- String的常规使用集合
今天先附上代码君: package com.jacob.javase; import java.io.UnsupportedEncodingException; /* *探讨String: * * ...
- linux脚本编程技术---8
一.什么是脚本 脚本是一个包含一系列命令序列的可执行(777)文本文件.当运行这个脚本文件时,文件中包含的命令序列将得到自动执行. 二.脚本编程 #!/bin/sh 首行固定格式 #!表明该脚本的的解 ...
- URAL 1227 Rally Championship(树的直径)(无向图判环)
1227. Rally Championship Time limit: 1.0 secondMemory limit: 64 MB A high-level international rally ...
- 自定义颜色显示的CheckBox
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- netsh winsock reset
最近要在虚拟机上安装 git ,然后托管一个项目,搞得我是焦头烂额.今天下午我卸载了vmware workstation ,但是奇怪的事就发生了,我的google chrome 浏览器没法浏览网页了. ...
- Linux系统编程@多线程与多进程GDB调试
博客内容参考自 http://www.cnblogs.com/xuxm2007/archive/2011/04/01/2002162.html http://blog.csdn.net/pbymw8i ...
- [POI 2008][BZOJ 1132]Tro
这题我真是无能为力了 这题的做法还是挺简单的 枚举左下角的点做为原点,把其余点按极角排序 PS.是作为原点,如枚举到 k 时,对于所有 p[i] (包括p[k]) p[i]-=p[k] (此处为 ...
- treap树及相关算法
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string ...
- acess the C\c++ from the Java
https://en.wikipedia.org/wiki/Java_Native_Interface http://docs.oracle.com/javase/7/docs/technotes/g ...