当前位置:首页 > 日记 > 正文

深入解析C#编程的事件

深入解析C#编程的事件
事件是允许对象或类提供公告的成员。用户可以通过提供事件句柄来为事件添加可执行代码。事件使用事件声明声明:

事件声明可以是事件域声明,也可以是事件属性声明。在每种情况下,声明都可以由属性集合、一个新修饰符、四个访问修饰符和静态修饰符的有效组合组成。

事件声明的类型必须是具有代表性的类型,并且代表类型必须至少与事件本身一样可访问。

一个事件域声明对应一个域声明宣布一个或多个具有代表性的类型域。只读修饰不在事件域声明允许。

一个事件属性声明对应一个属性声明,声明有代表性的一种属性。除了包含get访问器和set访问器的事件属性声明,成员名称和访问的声明是相同的那些属性声明和虚拟,重写抽象修饰符不允许。

在包含事件成员声明的程序文本中,事件成员与表示该类型的私有域或属性相关,该成员可以在允许使用域或属性的任何上下文中使用。

如果一个类或结构程序文本的外部包含事件成员声明,则此事件的成员只能作为+和- =操作符(右手操作,使用数量。这些操作符用于添加或删除事件成员的事件处理程序。此事件成员的访问操作符控制执行该操作的上下文。

+和- =仅在操作外事件的类型声明事件成员中使用,外部代码可以添加或删除事件句柄,但不能以任何其他方式获得数值或修改基本事件域或事件属性。

在示例

中的委托EventHandler(object sender,事件E);
公共类按钮:控件
{
公共事件EventHandler Click;
protected void OnClick(事件E){
如果(点击)!=单击)(这个,E);
}
公共空重置(){
单击= null;
}
}

这是在按钮类的单击事件域的使用没有限制。作为演示的一个例子,这个领域可以进行测试,修改,和用于代表打电话表达。班里的按钮OnClick方法的原因的单击事件的概念和呼叫,导致事件完全一样的事件成员代表因此造成事件没有特殊的语言结构,注意代表的呼叫是通过检查,代表不空了。

外部类按钮,单击的成员只能在+和-运算符右中使用,如下所示

点击新= EventHandler(…);

它在事件的调用列表中添加一个代表,单击

点击=新EventHandler(…);

它从单击事件的调用列表中移除一个代表。

在x或x = y = y操作的形式中,当x是引用x中发生的事件的成员时,外部包含声明的类型,操作的结果是无效的(与x数值相反)。
下面的示例演示如何将事件句柄连接到上面的类按钮实例中:

公共课logindialog:形式
{
Button OkButton;
Button CancelButton;
公共logindialog(){
按OK键=新按钮(…);
OkButton。点击=新EventHandler(OkButtonClick);
点击=新按钮(…);
点击。点击=新EventHandler(cancelbuttonclick);
}
Void OkButtonClick(object sender,事件E){
OkButton。单击事件 / /处理
}
无效cancelbuttonclick(object sender,事件E){
点击。点击事件 / /处理
}
}

在这里,logindialog构造函数创建两个按钮实例添加事件处理的点击事件。

事件成员是一个典型的域,如上面按钮示例所示。在每个事件中消耗一个字段存储是不可接受的。一个类可以定义事件的属性而不是事件域,并利用民营机制来存储基本的代表。(设想在某些情况下,大多数的事件处理,每个事件都是不可接受的使用领域,使用属性,而不是域允许开发者获得空间和时间上的。妥协的能力)

在示例

类控件:组件
{
事件的键/唯一
静态只读对象mousedowneventkey =新的对象();
静态只读对象mouseupeventkey =新的对象();
事件处理程序与密钥返回
保护委托geteventhandler(对象关键){…}
事件处理程序,该键与
protected void SetEventHandler(对象的关键,委托处理){…}
事件属性 / /鼠标
公共事件MouseEventHandler MouseDown {
得到{
Return (MouseEventHandler) GetEventHandler (mouseDownEventKey);
}
集合{
SetEventHandler(mousedowneventkey,值);
}
}
事件属性 / / MouseUp
公共事件MouseEventHandler MouseUp {
得到{
返回(mouseeventhandler)geteventhandler(mouseupeventkey);
}
集合{
SetEventHandler(mouseupeventkey,值);
}
}
}

课堂控制提供了一个事件的内部存储机制。方法是一个关键seteventhandler代表值有关,和方法geteventhandler返回与密钥相关的当前的代表。基本存储机制的设计是按照与空的代表类型关联的键没有消费,所以未处理的事件不占存储空间。
实例变量初始化函数

当一个构造函数不初始化一个形式的基函数或构造函数初始化(…),构造函数的实例字段在类中声明指定的初始化函数隐式执行。这是对任务序列相关,这在之前的直接基类构造函数隐式调用的构造函数入口直接执行。变量的初始化函数,它们出现在类声明的字面顺序执行。

构造函数的执行

实例变量初始化函数和构造函数初始化函数可以被视为自动插入构造函数主体的第一个句子。

使用系统集合;
班上的一个
{
int=1,y=1,计数;
公开a(){
计数= 0;
}
公共A(int n){
计数= n;
}
}
乙类:A
{
双SQRT2 =数学。Sqrt(2);
ArrayList项目=新的列表(100);
Int max;
公共b():这个(100){
项目。添加(默认);
}
公共b(int n):基(n - 1){
max = n;
}
}

多变量的初始化功能包括、和各种形式的构造函数初始化函数(基本)也包括在内。这个例子是下面的例子,其中每个注释指示自动插入语句(用于自动插入构造函数调用语法至少证明机制无效,)。

使用系统集合;
班上的一个
{
int,y,计数;
公开a(){
x=1;变量初始化器
y=1;变量初始化器
对象(调用);对象(构造函数)
计数= 0;
}
公共A(int n){
x=1;变量初始化器
y=1;变量初始化器
对象(调用);对象(构造函数)
计数= n;
}
}
乙类:A
{
双SQRT2;
列表项;
Int max;
公共b():这个(100){
b(100);调用b(int)构造函数
项目。添加(默认);
}
公共b(int n):基(n - 1){
SQRT2 =数学。Sqrt(2); / /变量的初始化
项目=新的数组(100); / /变量的初始化
A(n - 1);调用一个(int)构造函数
max = n;
}
}
注释变量初始化函数被转换为赋值语句,赋值语句在基类构造函数调用之前执行。这个顺序确保所有实例域在执行任何语句之前都由它们的变量初始化函数初始化:

班上的一个
{
公开a(){
printfields();
}
公共虚拟无效(printfields){ }
}
乙类:A
{
int=1;
y;
公共b(){
y=1;
}
printfields(){ public override void
console.writeline(X = { 0 },Y = { 1 }
}
}
当使用新的b()创建B的实例时,生成以下输出:

x=1,y=0

因为在调用基类构造函数之前执行变量初始化函数,所以x的值是1,但是y的值是0(int的默认值),这是由于y的赋值,直到基类构造函数返回为止。

默认构造函数

如果一个类不包含任何构造函数声明,就会自动提供一个默认构造函数。

公共(c):基(){ }

这里C是类的名称。默认构造函数完全调用直接基类的非参数构造函数。如果在直接基类中没有对非参数构造函数的访问,就会出现错误。

班级留言
{
对象发送;
字符串文本;
}

因为类不包含构造函数声明,所以它提供了一个默认构造函数。

班级留言
{
对象发送;
字符串文本;
公用(消息):基(){ }
}
私有构造函数

当一个类只声明一个私有构造函数时,其他类不能从这个类派生或创建一个类的实例:

触发类
{
私人触发(防止){} / /实例化
公共常量双PI = 3.14159265358979323846;
公共静态双罪(双x){…}
公共静态双COS(双x){…}
公共静态双Tan(双x){…}
}

触发类提供的方法和一组相关的常数,但不能被实例化。因此,它是一个单独的私有构造函数。注意,至少一个私有构造函数必须声明避免默认构造函数自动生成(通常具有公共可访问性)。

可选参数的构造函数

构造函数的这个(…)形式通常与可选构造函数参数的实现相关联。

类文本
{
公共(文本):这个(0, 0,空){ }
公共文本(int x,int y):这个(x,y,NULL){ }
公共文本(int x,int y,字符串s){
构造函数实现
}
}

前两个构造函数只为丢失的参数提供默认值。两个构造函数使用这个(…)构造函数初始化函数调用第三个构造函数,这些构造函数实际上初始化新实例:

文本t1 =新(文本);与文本相同(0, 0,null)
文本=新文本(5, 10);与文本相同(5, 10,null)
文本=新文本(5, 20,hello);

析构函数

析构函数是实现破坏类的实例的行为的一个成员:

对于声明析构函数的类,必须为析构函数声明指定一个标识符,如果指定了任何其他名称,就会发生错误。
析构函数声明的主体指定为了初始化类的一个新实例而执行的语句。这与具有返回类型的实例方法的主体有关。

实例

类测试
{
静态空主(){
A. F();
B. F();
}
}
班上的一个
{
静态a(){
console.writeline(,);
}
公共静态空f(){
console.writeline(A.f );
}
}
B类
{
静态B(){
console.writeline(初始化B);
}
公共静态空f(){
console.writeline(诚挚的);
}
}

将产生或以下输出:

初始化一个
A. F
初始化B
B. F

或以下输出:

初始化B
初始化一个
A. F
B. F

相关文章

Windows7系统的输入面板的手写笔迹

Windows7系统的输入面板的手写笔迹

系统,方法,输入,笔迹,面板,Windows7系统的输入面板可作为手写输入。它在平板电脑输入面板上用鼠标书写文本,然后在需要输入文本的地方插入文本,如上面。 平板电脑输入面板到任务栏是:单击任务栏按钮选择工具栏-平板电脑输入面板,每次你想使用…

时间的概念版截图

时间的概念版截图

截图,时间,电脑软件,时间的概念版的截图: 据科技博客TechCrunch,谷歌ChromeOS是一个基于浏览器的开放源代码的操作系统。它可以在浏览器中运行,适合上网本和其他新兴终端设备。官方版本预计在今年年底发布。 因为时间仍在研究和发展,却没有公…

谷歌改进新的Chrome标签页搜索功能

谷歌改进新的Chrome标签页搜索功能

标签页,搜索功能,电脑软件,Chrome,{北京时间9月25日消息,据国外媒体报道,谷歌今天宣布将把搜索栏放在新标签页的Chrome中,突出页面的位置。此外,谷歌涂鸦也将在新的标签页上。 谷歌涂鸦是一个定制的谷歌图标显示在节日或纪念日谷歌主页。现在,…

解决在win7系统USB接口不稳定的问

解决在win7系统USB接口不稳定的问

接口,系统,不稳定,电脑软件,USB,在WindowsXP系统中,计算机的USB接口是正常的,但在Windows 7系统的安装,USB变得不稳定。当鼠标或其他USB设备连接,是断开的时候。如果你的电脑有问题,你可以使用下面的方法: 单击{开始{ }控制面板} -电源选项,选择…

这些图形卡不能打开IE9的GPU加速功

这些图形卡不能打开IE9的GPU加速功

显卡,图形,功能,电脑软件,GPU,IE9的GPU功能是加快渲染速度。根据评价,浏览和IE9渲染速度快11倍,IE8。 安装最新的IE9之后,如果你想知道如果你的显卡支持IE9的GPU功能,您可以打开IE9的Internet选项下选择{ { } { }工具找到加速图形下的先进水平…

拼多多员工匿名发贴被辞退什么情况

拼多多员工匿名发贴被辞退什么情况

拼多多员工匿名发贴被辞退什么情况?事件始末详情最新进展,发贴,拼多多,脉脉,事件,情况,发帖,用户,加密,因在脉脉发布同事被抬上救护车照片,一名拼多多员工被辞退。对此,@脉脉 发布声明称,在用户信息管理上,严格遵循国家相关 法律法规的前提下,不以任何形…

WAPI无线模块IC出现加速无线产业的

WAPI无线模块IC出现加速无线产业的

产业,无线模块,电脑软件,WAPI,IC,随着新一代宽带无线网络的迅猛发展,具有自主知识产权的WAPI已越来越多地被证实了的客观要求,符合市场和行业的健康发展,近日,全球无线模块厂商海华宣布与IC WAPI应用推出全方位的无线模块的第一,标记快速起飞的W…

如何在win7共享文件

如何在win7共享文件

共享文件,如何在,电脑软件,Windows7的文件共享的详细步骤。 先打开来宾帐号,然后这一步就更重要了,点击网络左侧,右键属性如下图。 单击图中标记的位置更改高级共享设置;下图如下。 双击图中红色圆圈中的位置,将出现一个列表,显示下面所示的内容…

不要让win7记得我的搜索记录的方法

不要让win7记得我的搜索记录的方法

方法,搜索,不记得,不要让,电脑软件,每一次你在最windows7系统使用搜索框,搜索框会自动显示最新的搜索项目。如果你不想显示的项目你搜索的WIN7系统,可以用以下方法解决。 根据微软Windows徽标键+ { } {红}弹出运行窗口,输入gpedit.msc打开组…

辛巴直播间网购后80余人被骗600万

辛巴直播间网购后80余人被骗600万

辛巴直播间网购后80余人被骗600万什么情况?事件始末最新进展,网购,辛巴直播,事件,情况,金额,万元,受害者,被骗,80余人在辛巴直播间网购后,被电信诈骗600万元,多名受害者手拉横幅聚集在辛选直播基地门口,希望辛巴出面解决问题。这些受害者分布全国各地,多…

SkyDrive的离线下载功能的竞争质量

SkyDrive的离线下载功能的竞争质量

离线,下载,竞争,功能,质量,SkyDrive战不吸烟。近年来,国内的互联网公司开始竞争,竞争在SkyDrive领域。360、百度和腾讯的SkyDrive SkyDrive加入战争。百度宣布用户可以支付1元钱更新2T网盘空间,腾讯推出了10t云360云盘!高调宣布无限永久免费空…

腾讯视频体验报告1

腾讯视频体验报告1

报告,腾讯,视频,电脑软件,昨晚,腾讯悄悄下载QQ视频客户端的网站上,推出试用版,并宣布开始进入球员市场。该负责人表示,相关页面,抢鲜体验的第一名,但我确认后,非会员也可以下载和安装使用,为抢鲜体验第一件就是忽悠你。 软件名称: QQ视频播放器 软…