C#编程和.NET框架 崔建江 第5章 第五章新.pptVIP

C#编程和.NET框架 崔建江 第5章 第五章新.ppt

  1. 1、本文档共140页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* ThreadPool类提供一个由系统维护的线程池——可以看作一个线程的容器,该容器需要Windows 2000以上版本的系统支持,因为其中某些方法调用了只有高版本的Windows才有的API函数。你可以使用ThreadPool.QueueUserWorkItem()方法将线程安放在线程池里,要注意的是,ThreadPool类也是一个静态类,你不能也不必要生成它的对象,而且一旦使用该方法在线程池中添加了一个项目,那么该项目将是没有办法取消的。在这里你无需自己建立线程,只需把你要做的工作写成函数,然后作为参数传递给ThreadPool.QueueUserWorkItem()方法就行了,传递的方法就是依靠WaitCallback代理对象,而线程的建立、管理、运行等等工作都是由系统自动完成的,你无须考虑那些复杂的细节问题,线程池的优点也就在这里体现出来了,就好像你是公司老板——只需要安排工作,而不必亲自动手。 * .NET框架程序设计P255 String对象最重要的特性是其恒定性。也就是说一个字符串一旦被创建,我们就不可能再将其变长变短或改变其中任何的字符。 这里,ToLower返回的是一个新的字符串,在其返回的字符串上进行的Substring也返回一个新的字符串,最后我们又使用EndsWith对其末尾的字符串进行检查。由于ToLower和Substring返回的两个临时字符串不再被应用程序代码所引用,因此垃圾收集器在下一次操作时将回收它们的内存。 可以发现,重复修改一个字符串效率会很低 利用Substring(int, int)方法可以从指定位置取出某String对象的部分或指定长度的内容,ToLower()大写改小写ToUpper()小写改大写 * 返回 0 ABC 8 ABC * 前导和尾部的\b序列确保只需要快乐完全是字的文本部分,在这个文本部分中(S+)://会选择一个或多个不是空白的字符,其后是://在HTTP * 客观的讲,使用函数指针作为其参数的函数如果直接调用函数或是直接把调用的函数的函数体放在这个主函数中也可以实现其功能。那么为什么还要使用函数指针呢?我们仔细看一下上面的main()函数就可以发现,main()函数两次调用了test函数,前一次求出最大最小值,后一次求出两数的和与差。如果我们test函数不用函数指针,而是采用直接在test函数中调用函数的方法,使用一个test函数还能完成这个功能吗?显然不行,我们必须写两个这样的test函数供main()函数调用,虽然大多数代码还是一样的,仅仅是调用的函数名不一样。上面仅仅是一个简单的例子,实际生活中也许main()函数会频繁的调用test(),而每次的差别仅仅是完成的功能不一样,也许第一次调用会要求求出两数的和与差,而下一次会要求求出最大值以及两数之和,第三次呢,也许是最小值和最大值,……,如果不用函数指针,我们需要写多少个这样的test()函数?显然,函数指针为我们的编程提供了灵活性。 * 除此以外,还可能由于错误的管理地址,将数据写入错误地址,造成程序的崩溃;还可能由于对指针不恰当的赋值操作产生悬浮指针;还可能产生内存越界,内存泄漏等等问题 C#中的委托和指针不一样,指针不通过MSIL而是直接和内存打交道,这也是指针不安全的原因所在,当然也是采用指针能够提高程序运行速度的缘故;委托不与内存打交道,而是把这一工作交给CLR去完成。CLR无法阻止将不安全的代码调用到本机(非托管)代码中或执行恶意操作。然而当代码是类型安全时,CLR的安全性强制机制确保代码不会访问本机代码,除非它有访问本机代码的权限 * 构造MyPoint时传入的是一个方法,而不是一个参数 * 对一个对象数组排序时,也需要一个函数参数,用来比较两个对象的大小 * ControName.Event是控件名称和该控件的事件名;this是当前窗体; methodName是处理该事件的方法。 第5章:C#进阶 * 5.7.3事件(Event) 事件是类发出的通知,指出发生了某种事情。其它的类可以通知执行某种操作。 代理在处理事件中使用。 第5章:C#进阶 * 声明并使用事件的步骤 1.为事件建立代理; 2.创建一个类给事件处理程序传递参数; 3.声明事件对应的代码; 4.创建事件发生时将执行的代码(处理程序); 5.使事件发生。 第5章:C#进阶 * 声明并使用事件的步骤(1/5) public delegate void EventHandlerName(object souece, xxxEventArgs e); 1.声明一个多点代理(Multicast delegate) 表明激发事件的源对象 与事件相关的信息 EventHandlerName是事件处理程序对应代理的名称

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档