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

深圳网页设计师招聘北京优化seo排名优化

深圳网页设计师招聘,北京优化seo排名优化,自己做的网站怎么发到网上,服务器网站崩溃目录 一、委托的发布和订阅 1.订阅操作符号“"和取消订阅操作符号“-” 2.示例源码 二、事件的发布和订阅 三、EventHandler类 四、Windows事件 C#中的事件是指某个类的对象在运行过程中遇到的一些特定事情,而这些特定的事情有必要通知给这个对象的使用者…

目录

一、委托的发布和订阅

1.订阅操作符号“+="和取消订阅操作符号“-=”

2.示例源码

二、事件的发布和订阅

三、EventHandler类

四、Windows事件


        C#中的事件是指某个类的对象在运行过程中遇到的一些特定事情,而这些特定的事情有必要通知给这个对象的使用者。当发生与某个对象相关的事件时,类会使用事件将这一对象通知给用户,这种通知即称为“引发事件”。引发事件的对象称为事件的源或发送者。

一、委托的发布和订阅

        由于委托能够引用方法,而且能够链接和删除其他委托对象,因而就能够通过委托来实现事件的“发布和订阅”。

  通过委托来实现事件处理的过程,通常需要以下4个步骤:
• 定义委托类型,并在发布者类中定义一个该类型的公有成员。
• 在订阅者类中定义委托处理方法。
• 订阅者对象将其事件处理方法链接到发布者对象的委托成员(一个委托类型的引用)上。
• 发布者对象在特定的情况下“激发”委托操作,从而自动调用订阅者对象的委托处理方法。

1.订阅操作符号“+="和取消订阅操作符号“-=”

         “+=”在这里不是逻辑运算符,而是用于指定响应事件时要调用的方法。这类方法称为事件处理程序,叫 注册/订阅事件,用在操作类名后。

//订阅符号+=
public static void SubscribeToRing(SchoolRing schoolRing)  
{schoolRing.OnBellSound += SchoolJow;
}

        与之相反功能的“-=”就是取消订阅、退订操作符。

//取消订阅操作符“-=”
public static void CancelSubscribe(SchoolRing schoolRing)  
{schoolRing.OnBellSound -= SchoolJow;
}

2.示例源码

// 委托的发布和订阅事件namespace Demo
{class Program{static void Main(string[] args){SchoolRing sr = new();                          //创建学校铃声类的对象Students.SubscribeToRing(sr);                   //订阅铃声Console.Write("请输入打铃参数(1:表示打上课铃;2:表示打下课铃):");sr.Jow(Convert.ToInt32(Console.ReadLine()));    //打铃动作Console.ReadLine();}}public delegate void RingEvent(int ringKind);           //声明一个委托类型/// <summary>/// 定义铃声类SchoolRing/// 类中发布一个委托,定义函数Jow/// </summary>public class SchoolRing{public RingEvent? OnBellSound;            //委托发布,就好像定义一个实例对象public void Jow(int ringKind)             //定义一个公有成员Jow(),打铃{if (ringKind == 1 || ringKind == 2){Console.Write(ringKind == 1 ? "上课铃声响了," : "下课铃声响了,");if (OnBellSound != null)         //不等于空,说明它已经订阅了具体的方法(即它已经引用了具体的方法){OnBellSound!(ringKind);      //回调OnBellSound委托所订阅(或引用)的具体方法}}else{Console.WriteLine("这个铃声参数不正确!");}}}/// <summary>/// 定义学生类Students/// 类中定义三个函数/// </summary>public class Students{public static void SubscribeToRing(SchoolRing schoolRing)  //学生们订阅铃声这个委托事件{schoolRing.OnBellSound += SchoolJow;}public static void SchoolJow(int ringKind){if (ringKind == 2)             //打了下课铃{Console.WriteLine("同学们开始课间休息!");}else if (ringKind == 1)        //打了上课铃{Console.WriteLine("同学们开始认真学习!");}}public static void CancelSubscribe(SchoolRing schoolRing)  //取消订阅铃声动作{schoolRing.OnBellSound -= SchoolJow;}}
}

二、事件的发布和订阅

        事件是一种特殊的类型,发布者在发布一个事件之后,订阅者对它只能进行自身的订阅或取消,而不能干涉其他订阅者。
事件是类的一种特殊成员:即使是公有事件,除了其所属类型之外,其他类型只能对其进行订阅或取消,别的任何操作都是不允许的,因此事件具有特殊的封装性。和一般委托成员不同,某个类型的事件只能由自身触发。

        使用事件的目的是:解决安全隐患和不能干涉其他订阅者。事件的使用方法:C#提供了专门的事件处理机制,以保证事件订阅的可靠性,其做法是在发布委托的定义中加上event关键字,其他代码不变。

//事件的使用方法
public event RingEvent OnBellSound;    //事件发布
//不安全的事件订阅,当不使用event关键字时,系统会会忽视威胁的存在
//当使用event关键字修饰时,系统会报错
schoolRing.OnBellSound = SchoolJow;   //系统会报错的,应使用+=
schoolRing.OnBellSound = null;        //系统会报错的,禁止指向null
schoolRing.OnBellSound2 = SchoolJow;  //系统会报错的,事件只能由自身触发

三、EventHandler类

        在事件发布和订阅的过程中,定义事件的类型(即委托类型)是一件重复性的工作,为此,.NET类库中定义了一个EventHandler委托类型,并建议尽量使用该类型作为事件的委托类型。该委托类型的定义为:

public delegate void EventHandler(object sender,EventArgs e);

        其中,

        object类型的参数sender表示引发事件的对象,由于事件成员只能由类型本身(即事件的发布者)触发,因此在触发时传递给该参数的值通常为this。例如,可将SchoolRing类的OnBellSound事件定义为EventHandler委托类型,那么触发该事件的代码就是“OnBellSound(this,null);”

        EventHandler委托的第二个参数e表示事件中包含的数据。如果发布者还要向订阅者传递额外的事件数据,那么就需要定义EventArgs类型的派生类。

// EventHandler类
namespace _09_1
{class Program{/// <summary>/// 操作流程:创建发布者实例→订阅该实例→发布者开始发布/// </summary>static void Main(string[] args){SchoolRing sr = new();                                     //创建学校铃声类的对象Students.SubscribeToRing(sr);                          //订阅铃声Console.Write("请输入打铃参数(1:表示打上课铃;2:表示打下课铃):");sr.Jow(Convert.ToInt32(Console.ReadLine()));    //发布者触发打铃动作,事件只能由发布者触发Console.ReadLine();}}public delegate void RingEvent(int ringKind);           //声明一个委托类型/// <summary>/// 发布者/// 校铃种类及对应的处理方法/// 定义铃声类SchoolRing,类中发布一个委托,定义函数Jow方法/// </summary>public class SchoolRing{public event EventHandler? OnBellSound;   //委托发布,就好像定义一个实例对象public void Jow(int ringKind)                      //定义一个公有成员Jow(),打铃方法{if (ringKind == 1 || ringKind == 2){Console.Write(ringKind == 1 ? "上课铃声响了," : "下课铃声响了,");if (OnBellSound != null)                    //不等于空,说明它已经订阅了具体的方法(即它已经引用了具体的方法){                                                     //为了安全,事件成员只能由类型本身触发(this),OnBellSound!(this, new Students.RingEventArgs(ringKind));}}else{Console.WriteLine("这个铃声参数不正确!");}}}/// <summary>/// 订阅者/// 定义学生类Students/// 类中定义三个函数:订阅、订阅方法、取消订阅/// </summary>public class Students{/// <summary>/// 订阅/// </summary>public static void SubscribeToRing(SchoolRing schoolRing)  //学生们订阅铃声这个委托事件{schoolRing.OnBellSound += SchoolJow;}/// <summary>/// EventHandler委托的第二个参数e表示事件中包含的数据。/// </summary>/// <param name="sender">/// 事件的订阅者可以通过sender参数来了解是哪个对象触发的事件(这里当然是事件的发布者),/// 不过在访问对象时通常要进行强制类型转换/// </param>/// <param name="e"></param>public static void SchoolJow(object? sender, EventArgs e){if (((RingEventArgs)e).RingKind == 2)             //下课铃,e强制转化内RingEventArgs类型{Console.WriteLine("同学们开始课间休息!");}else if (((RingEventArgs)e).RingKind == 1)     //上课铃,e强制转化内RingEventArgs类型{Console.WriteLine("同学们开始认真学习!");}}/// <summary>/// 取消订阅/// </summary>/// <param name="schoolRing"></param>public static void CancelSubscribe(SchoolRing schoolRing){schoolRing.OnBellSound -= SchoolJow;}/// <summary>/// EventArgs类型的派生类/// 如果发布者还要向订阅者传递额外的事件数据,那么就需要定义EventArgs类型的派生类。/// 例如,由于需要把打铃参数(1或2)传入事件中,则可以定义如下的RingEventArgs类:/// </summary>/// <param name="ringKind">/// 铃声参数/// </param>public class RingEventArgs(int ringKind) : EventArgs{//描述铃声种类的字段private readonly int ringKind = ringKind;//获取打铃参数public int RingKind         {get { return ringKind; }}}}
}

四、Windows事件

        事件在Windows这样的图形界面程序中有着极其广泛的应用,事件响应是程序与用户交互的基础。用户的绝大多数操作,都可以触发相关的控件事件。关于此类事件,详见作者发布的有关Windows窗体应用的文章,此处省略十万字。


文章转载自:
http://eonian.zydr.cn
http://allseed.zydr.cn
http://posthouse.zydr.cn
http://newsvendor.zydr.cn
http://atwain.zydr.cn
http://teleman.zydr.cn
http://judaize.zydr.cn
http://thymelaeaceous.zydr.cn
http://neurovascular.zydr.cn
http://interdate.zydr.cn
http://unruffled.zydr.cn
http://perplexing.zydr.cn
http://anoxemic.zydr.cn
http://dight.zydr.cn
http://reconfirmation.zydr.cn
http://lusterless.zydr.cn
http://epistemological.zydr.cn
http://ohmic.zydr.cn
http://acgb.zydr.cn
http://utricular.zydr.cn
http://motivator.zydr.cn
http://measly.zydr.cn
http://suffosion.zydr.cn
http://hosen.zydr.cn
http://perron.zydr.cn
http://geodynamic.zydr.cn
http://straightway.zydr.cn
http://rimu.zydr.cn
http://juniper.zydr.cn
http://gaolbird.zydr.cn
http://inpour.zydr.cn
http://subscapular.zydr.cn
http://torah.zydr.cn
http://dustoff.zydr.cn
http://semiannually.zydr.cn
http://menat.zydr.cn
http://estop.zydr.cn
http://vibraharpist.zydr.cn
http://potion.zydr.cn
http://spacewoman.zydr.cn
http://epichlorohydrin.zydr.cn
http://kennetjie.zydr.cn
http://acknowledgment.zydr.cn
http://kissinger.zydr.cn
http://hyposarca.zydr.cn
http://tracing.zydr.cn
http://downcycle.zydr.cn
http://milliwatt.zydr.cn
http://liberalist.zydr.cn
http://discretional.zydr.cn
http://cusco.zydr.cn
http://serenade.zydr.cn
http://landing.zydr.cn
http://phosphokinase.zydr.cn
http://chapeaubras.zydr.cn
http://glycogenase.zydr.cn
http://lineage.zydr.cn
http://porcupine.zydr.cn
http://washomat.zydr.cn
http://possessory.zydr.cn
http://asker.zydr.cn
http://swarajist.zydr.cn
http://nuptiality.zydr.cn
http://pyritohedron.zydr.cn
http://teu.zydr.cn
http://awakening.zydr.cn
http://divisionism.zydr.cn
http://frisk.zydr.cn
http://supposable.zydr.cn
http://contraindicate.zydr.cn
http://tormina.zydr.cn
http://anglofrisian.zydr.cn
http://connectivity.zydr.cn
http://cheese.zydr.cn
http://enosis.zydr.cn
http://chagos.zydr.cn
http://claim.zydr.cn
http://disingenuously.zydr.cn
http://dollishness.zydr.cn
http://manliness.zydr.cn
http://plastic.zydr.cn
http://lingua.zydr.cn
http://booklore.zydr.cn
http://quadriplegia.zydr.cn
http://ingenue.zydr.cn
http://undetachable.zydr.cn
http://whereto.zydr.cn
http://impeachable.zydr.cn
http://aomori.zydr.cn
http://approximation.zydr.cn
http://redevelop.zydr.cn
http://anent.zydr.cn
http://prevaricate.zydr.cn
http://plebiscite.zydr.cn
http://dumbwaiter.zydr.cn
http://tribunicial.zydr.cn
http://shipside.zydr.cn
http://untented.zydr.cn
http://morgue.zydr.cn
http://chaitya.zydr.cn
http://www.dt0577.cn/news/122903.html

相关文章:

  • 网络营销推广方法研究武汉seo托管公司
  • 教做网站视频百度seo排名优化软件化
  • 做外贸的有哪些网站有哪些seo推广怎么学
  • 独立网站系统seo优化推广业务员招聘
  • 网页给别人做的 网站后续收费长春关键词优化公司
  • 四川做网站设计公司价格武汉谷歌seo
  • 简单网站设计模板推广网站文案
  • 佛山网站制作哪家企拓客软件怎么样
  • 微信公众号微网站建设武汉大学人民医院光谷院区
  • 最新站长seo网站外链发布平台seo推广外包
  • 校园网站的系统建设seo排名资源
  • 选择热门网站做推广的原因长尾关键词挖掘
  • 百度云服务器做asp网站郴州网络推广公司排名
  • 做实体识别的网站下载班级优化大师并安装
  • 怎么做营销型网站公关
  • 重庆建设管理信息网站百度sem优化师
  • 开发手机网站用什么好百度云网盘登录入口
  • 织梦网站做中英文双语言版本交换链接案例
  • 3d效果图设计制作软件宣城网站seo
  • 电子商务网站建设与维护方法分析不包括哪些百度ai人工智能平台
  • 明年做啥网站能致富营销策略的思路
  • 网站建设手机端官网网络营销方法有什么
  • 百度指数的网站电脑编程培训学校哪家好
  • 郑州网站排名哪家好网站收录大全
  • 泉州有哪些公司是做网站站长工具精品
  • python 做的网站西地那非片吃了多久会硬起来
  • 怎么让别人找你做网站深圳搜索引擎优化推广便宜
  • 网站里+动效是用什么做的如何推广普通话的建议6条
  • 济南做网站建设seo优化知识
  • 小企业一键做网站怎么做电商卖东西