当前位置: 首页 > news >正文

个人网站名称有哪些做宣传可以在哪些网站上发布

个人网站名称有哪些,做宣传可以在哪些网站上发布,免费建站网站大全,网站开发实验报告三目录 一、发布者和订阅者 #xff08;一#xff09;概述 #xff08;二#xff09;有关事件的重要事项 #xff08;三#xff09;有关事件的私有委托需要了解的重要事项 二、源代码组件概览 三、声明事件 事件是成员 四、订阅事件 五、触发事件 六、标准事件的…目录 一、发布者和订阅者 一概述 二有关事件的重要事项 三有关事件的私有委托需要了解的重要事项 二、源代码组件概览 三、声明事件 事件是成员 四、订阅事件 五、触发事件 六、标准事件的用法 一通过扩展EventArgs来传递数据 二移除事件处理程序 七、事件访问器 事件基于委托为委托提供了一种发布/订阅机制。在架构内到处都能看到事件。在Windows应用程序中Button类提供了Click事件。这类事件就是委托。触发Click事件时调用的处理程序方法需要定义其参数由委托类型定义。 一、发布者和订阅者 一概述 很多程序都有一个共同的需求即当一个特定的程序事件发生时程序的其他部分可以得到该事件已经发生的通知。 发布者/订阅者模式可以满足这种需求。在这种模式中发布者类定义了一系列程序的其他部分可能感兴趣的事件。其他类可以“注册”以便在这些事件发生时收到发布者的通知。这些订阅者类通过向发布者提供一个方法来“注册”以获取通知。当事件发生时发布者“触发事件”然后执行订阅者提交的所有事件。 由订阅者提供的方法称为回调方法。因为发布者通过执行这些方法来“往回调用订阅者的方法”。还可以将它们称为事件处理程序因为它们是为处理事件而调用的代码。 二有关事件的重要事项 发布者publisher发布某个事件的类或结构其他类可以在该事件发生时得到通知。 订阅者subscriber注册并在事件发生是得到通知的类或结构。 事件处理程序event handler由订阅者注册到事件的方法在发布者触发事件时执行。事件处理程序方法可以定义在事件所在的类或结构中也可以定义在不同的类或结构中。 触发raise事件调用或触发事件的术语。当事件被触发时所有注册到它的方法都会被依次调用。 三有关事件的私有委托需要了解的重要事项 事件的很多部分都与委托类似。实际上事件就像是专门用于某种特殊用途的简单委托。委托和事件的行为之所以相似是有充分理由的。事件包含了一个私有的委托。 事件提供了对它的私有控制委托的结构化访问。也就是说你无法直接访问委托事件中可用的操作比委托要少对于事件我们只可以添加、删除或调用事件处理程序。事件被触发时它调用委托来依次调用调用列表中的方法。 二、源代码组件概览 委托类型声明事件和事件处理程序必须有共同的签名和返回类型它们通过委托类型进行描述。 事件处理程序声明订阅者类中会在事件触发时执行的方法声明。它们不一定是显式命名的方法还可以是匿名方法和Lambda表达式。 事件声明发布者类必须声明一个订阅者类可以注册的事件成员。当类声明的事件为public时称为发布了事件。 事件注册订阅者必须注册事件才能在事件被触发时得到通知这是将事件处理程序与事件相连的代码。 触发事件的代码发布者类中“触发”事件并导致调用注册的所有事件处理程序的代码。 三、声明事件 发布者类必须提供事件对象。创建事件比较简单——只需要委托类型和名称。事件声明的语法如下的代码所示。代码中声明了一个叫做CountADozen的事件。注意如下有关CountADozen事件的内容。 事件声明在一个类中。它需要委托类型的名称任何附加到事件如注册的处理程序都必须与委托类型的签名和返回类型匹配它声明为public这样其他类和结构可以在它上面注册事件处理程序。不能使用对象创建表达式new 表达式来创建它的对象 class Incrementer {public event EventHandler CountedADozen;//event:关键字//EventHandler:委托类型//CountedADozen:事件名 } 我们可以通过使用逗号分隔的列表在一个声明语句中声明一个以上的事件。 事件是成员 一个常见的误解是把事件视为类型然而它不是。和方法、属性一样。事件是类或结构的成员这一点引出了几个重要的特性。 1由于事件是成员 我们不能在一段可执行代码中声明事件它必须声明在类或结构中和其他成员一样 2事件成员被隐式自动初始化为null。 事件声明需要委托类型的名称我们可以声明一个委托类型或使用已有的委托类型。如果声明一个委托类型他必须指定将被事件注册的方法的签名和返回类型。 四、订阅事件 订阅者向事件添加事件处理程序。对于一个要添加到事件的事件处理程序来说它必须具有与事件的委托相同的返回类型和签名。 1使用运算符来为事件添加事件处理程序。事件处理程序位于该运算符的右边。 2事件处理程序的规范可以是以下任意一种 实例方法的名称静态方法的名称匿名方法Lambda表达式 例如下面的代码为CountADozen事件添加了3个方法实例方法静态方法和使用委托形式的实例方法。 incrementer.CountedADozen IncrementDozensCount;//方法引用形式 incrementer.CountedADozen ClassB.CounterHandlerB;//方法引用形式 mc.CountedADozen new EventHandler(cc.CounterHandlerC);//委托形式//incrementer:类 //CountedADozen:事件成员 //IncrementDozensCount实例方法 //ClassB.CounterHandlerB静态方法 和委托一样我们可以使用匿名方法和Lambda表达式来添加事件处理程序。例如如下代码先使用Lambda表达式然后使用了匿名方法。 //Lambda表达式 incrementer.CountADozen () DozensCount;//匿名方法 Incrementer.CountADozen delegate {DozensCount;}; 五、触发事件 事件成员本身只是保存了需要被调用的事件处理程序。如果事件没有被触发什么都不会发生。我们需要确保有代码在合适的时候做这件事情。 例如如下代码触发了CountADozen事件。注意如下有关代码的事项。 1在触发事件之前和null进行比较从而查看事件是否包含事件处理程序。如果事件是null则表示没有事件处理程序不能执行。 2触发事件的语法和调用方法一样 使用事件名称后面跟着参数列表包含在圆括号中参数列表必须与事件的委托类型相匹配。 把事件声明和触发事件的代码放到一起便有了如下的发布者类声明。这段代码包含了两个成员事件和一个叫作DoCount的方法该方法将在适当的时候触发该事件。 class Incrementer {public event EventHandler CountADozen;//声明事件void DoCount(object source, EventArgs args){for(int i1;i 100; i)if(i % 12 0)if(CountADozen ! null)//确认有方法可以执行CountADozen(source,args);//触发事件} } 下面展示整个程序包含发布者类Incrementer和订阅者类Dozens。代码中需要注意的地方如下 在构造函数中Dozens类订阅事件将IncrementDozensCount作为事件处理程序在Incrementer类的DoCount方法中每增加12个计数就触发CountADozen事件。 delegate void Handler();//声明委托//发布者 class Incrementer {public event Handler CountedADozen//创建事件并发布public void DoCount(){for(int i1; i 100; i)if(i % 12 0 CountedADozen ! null)CountedADozen(); //每增加12个计数触发事件一次} }//订阅者 class Dozens {public int DozensCount{get; private set;}public Dozens(Incrementer incrementer){DozensCount 0;incrementer.CountedADozen IncrementDozensCount;//订阅事件}//声明事件处理程序void IncrementDozensCount(){DozensCount;} }class Program {static void Main(){Incrementer incrementer new Incrementer();Dozens dozenCounter new Dozens(incrementer);incrementer.DoCount();Console.WriteLine(Number of dozens {0}, dozensCounter.DozensCOunt);} } 六、标准事件的用法 GUI编程是事件驱动的也就是说在程序运行时它可以在任何时候被时间打断比如按钮点击、按下按键或系统定时器。在这些情况发生时程序需要处理事件然后继续做其他事件。 显然程序事件的异步处理是使用C#事件的绝佳场景。Windows GUI编程如此广泛地使用了事件以至于对于事件的使用.NET框架提供了一个标准模式。该标准模式的基础就是System命名空间中声明的EventHandler委托类型。EventHandler委托类型的声明如下 public delegate void Eventhandler(object sender, EventArgs e); 关于该声明需要注意以下几点 第一个参数用来保存触发事件的对象的引用。由于它是object类型的所以可以匹配任何类型的实例。第二个参数用来保存状态信息指明什么类型适用于该应用程序。返回类型是void 一通过扩展EventArgs来传递数据 为了向自己的事件处理程序的第二个参数传入数据同时遵循标准惯例我们需要声明一个派生自EventArgs的自定义类它可以保存我们需要传入的数据。类的名称应该以EventArgs结尾。 例如如下代码声明了一个自定义类他能将字符串存储在名为Message的字段中。 public class IncrementerEventArgs:EventArgs {public int IterationCount{get;set}//存储一个整数 } 现在我们有了一个自定义的类可以向事件处理程序的第二个参数传递数据所以你需要一个使用新自定义类的委托类型。为此可以使用泛型版本的委托Eventhandler。 要使用泛型委托需要做到以下两点 将自定义类的名称放在尖括号内在需要使用自定义委托类型的地方使用整个字符串。例如event声明可能为如下形式 public event EventHandlerIncrementerEventArgs CounteDozen;//EventHandlerIncrementerEventArgs 泛型委托使用自定义类 //CounteDozen 事件名称 二移除事件处理程序 再用完事件处理程序之后可以从事件中把它移除。可以利用 - 运算符事件处理程序从事件中移除。 p.SImpleEvent - s.MethodB; //移除事件处理程序MethodB 下面的代码向SimpleEvent事件添加了两个处理程序然后触发事件。每个处理程序都将被调用并打印文本行。然后将MethodB处理程序从事件中移除。当事件再次被触发时只有MethodA处理程序会打印一行。 class Publisher {public event EventHandler SimpleEvent;public void RaiseTheEvent() {SimpleEvent(this,null);} }class Subscriber {public void MethodA(object o, EventArgs e) {Console.WriteLine(AAA);}public void MethodB(object o, EventArgs e) {Console.WriteLine(BBB);} }class Program {static void Main(){Publisher p new Publisher();Subscriber p new Subscriber();p.SimpleEvent s.MethodA;p.SimpleEvent s.MethodB;p.RaiseTheEvent();Console.WriteLine(\r\nRemove MethodB);p.SimpleEvent - s.MethodB;p.RaiseTheEvent();} } 这段代码会产生如下输出 AAA BBB Remove MethodB AAA 如果一个处理程序向事件注册了多次那么当执行命令移除处理程序时将只移除列表中该处理程序的最后一个实例。 七、事件访问器 之前提过事件只能使用 和 - 运算符。这两个运算符有良好的行为。 然而我们可以修改这两个运算符的行为在使用它们时让事件执行任何我们希望执行的自定义代码。 要改变这两个运算符的操作必须为事件定义事件访问器。 有两个访问器add和remove声明事件的访问器看上去和声明一个属性差不多。 下面的示例演示了具有访问器的事件声明。两个访问器都有叫作value的隐式值参数它接受实例或静态方法的引用。 public event EventHandler CountedADozen {add{... //执行运算符的代码}remove{... //执行-运算符的代码} } 声明了事件访问器之后事件不包含任何内嵌委托对象。我们必须实现自己的机制来存储和移除事件注册的方法。 事件访问器表现为void方法也就是不能使用返回值的return语句。
http://www.pierceye.com/news/294278/

相关文章:

  • 网站模版自适应网站建设全包方案
  • 广州网站建设鞍山家电网站首页制作
  • 西安注册公司网站网站建设找a金手指
  • 浙江省住房和城乡建设厅网站打不开设计书籍频道开放说明
  • 阿里巴巴 网站建设遵义网警
  • 宁夏建设厅网站官网如何做DJ网站
  • 龙岩做网站公司哪家好erp系统与网站对接长沙
  • 做二手房需要用到哪些网站搜集房源找人做设计的网站
  • 建设银行河北分行招聘网站可以下载新闻视频的网站
  • 凡客官网旗舰店襄阳seo关键词优化公司
  • 区域门户网站源码健身网站建设
  • 动漫网站建设赚钱吗三端互通传奇手游开服列表
  • 网站建设前的需求分析手机免费制作网站模板免费下载
  • 网站兼容ie7接私活做网站要不要签合同
  • 广州网站建设首选快优wordpress拖拽建站
  • 网站开发 播放音频amr个人网站设计案例
  • 建设一个网站可以采用那几方案常用的网页制作工具有什么
  • 摄影看图网站河南省交通工程造价信息网
  • 网站架构发展历程的思考和心得体会软件开发网站开发培训
  • 陕西天工建设有限公司网站长安网站建设哪家好
  • 东莞网站的建设重庆妇科医院哪家好医院公立医院
  • 北京用网站模板建站wordpress中文 插件下载
  • 做网站公司哪家正规重庆网站建设重庆
  • 网站转备案申请学校网站建设申请书
  • 宜昌网站建设选择宜昌慧享互动线上店免费推广的软件
  • 网站建设主流语言织梦网站流动广告代码
  • 南京做网站公司哪个网站上做ppt比较好看的
  • 在服务器上搭建网站中国建设银行淮南分行网站
  • 网站建设什么服务器品牌哪个好南京企业制作网站
  • 太原有哪些做网站的公司如何伪原创 网站