摘要: 委托确实是一个有趣的结构,它允许内存中的对象进行双向对话。然而,你可能会同意,从头使用委托会有一些重复代码(定义托委,声明必要的成员变量,以及创建自定义的注册/注销方法来保护封装等)。 除了时间之外,这样使用委托来作为应用程序的回调机制会有另一个问题是:如果我们没有反委托成员变量定义为私有的,调用者就可以直接访问委托对象。这样,调用者就可以把变量赋值为新的委托对象(实际上也就删除了当前要调用的方法列表),更糟糕的是,调用者可以直接调用委托的调用列表。为说明这个问题请看如下代码:public class Car{ //一个委托 public delegate void Expl... 阅读全文
posted @ 2013-07-15 22:30 DBNull 阅读(299) 评论(0) 推荐(1) 编辑
摘要: 复杂的委托示例 为了说明更高级的委托使用方法,首先创建一个名为CarGarage的控制台应用程序项目,其中必须包含Car/Radio类型。让我们修改Car类使之包含两个新的布尔成员变量。一个用来决定是否应该洗车(isDirty);另一个表示该汽车是否需要互换轮胎(shouldRotate)。为了便于对象用户使用新的状态数据,Car类还定义了一些新属性并修改了构造函数。代码如下://修改后的Car类public class Car{ ... //我们需要清洗它吗?需要轮胎互换吗? private bool isDirty; private bool shouldRotat... 阅读全文
posted @ 2013-07-15 21:47 DBNull 阅读(213) 评论(1) 推荐(1) 编辑
摘要: 使用委托改造Car类型定义将通知发送给调用者的委托类型。声明Car类中每个委托类型的成员变量在Car上创建辅助函数使调用者能够指定由委托成员变量保存的方法修改Accelerate()方法以适当的情形下调用委托的调用列表。public calss Car{ //定义委托变量 public delegate void AboutToBlow(string msg); public delegate void Exploded(string msg); //定义每个委托类型的成员变量 private AboutToBlow almostDeadList; private... 阅读全文
posted @ 2013-07-13 00:44 DBNull 阅读(227) 评论(0) 推荐(1) 编辑
摘要: 这几天认真研究了C#的委托与事件,下面对研究的知识总结一下,N年后找出来看一下应该也不错。 历史上,Windows API经常使用C语言风格的函数指针来创建称为回调函数或简称为回调的实体。使用回调,码农可以使一个函数返回报告给(即回调)程序中的另一个函数。 在.NET Framework里,回调仍是可能的,它们的功能是由使用更为安全和面向对象的委托(delegate)来完成的。本质上来讲,委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。委托类型包含3个得要的信息:它所调用的方法的名称;该方法的参数(可选);该方法的返回值(可选); 当一个委托被创建并提供... 阅读全文
posted @ 2013-07-13 00:31 DBNull 阅读(427) 评论(0) 推荐(1) 编辑
摘要: 下面具体说明控件生命周期的11阶段:1.初始化(对应OnInit方法)完成控件的初始化并通过ProcessRequest方法递归遍历所有的子控件以及依次调用它们的OnInit方法。可以通过重写OnInit方法来扩展功能或增加初始化内容。除此之外,本阶段将打开控件的视图跟踪功能(调用TraceViewState方法),这样才能在页面回发时正确恢复控件的属性。2.加载视图状态(对应LoadViewState方法)本阶段仅在页面回发时才执行,事实上,在第一次访问页面时还没有获取到存储在视图状态中的数据。本阶段完成加载视图状态到控件(前提是该控件启用视图状态),对于复杂对象则需要重写LoadViewS 阅读全文
posted @ 2013-06-30 23:13 DBNull 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 场景在WEB系统开发中,我们经常面对这样的需求:如何在一个请求中共享数据或对象实例?之前我都会用HttpContext.Current.Items。然而有一天我发现了两个事实:一、每个请求都是在一个线程中执行的;二、[ThreadStatic]可以标注某个静态字段为每个线程提供独立的存储。面对这两个发现,我得出了这个结论:可以用[ThreadStatic]替换HttpContext.Current.Items。问题可以用[ThreadStatic]替换HttpContext.Current.Items吗?实验实验素材using System;using System.Collections.G 阅读全文
posted @ 2013-06-29 00:16 DBNull 阅读(362) 评论(0) 推荐(0) 编辑
摘要: HttpContext的Items集合是ASP.NET保守得最好的秘密之一。它是IDictionary键/值对的对象集合,在HttpRequest的生存期中共享。它只存在于HttpRequest中。状态为什么要存储这么短的时间?有如下原因:在IHttpModule和IHttpHandler之间共享内容。如果编写一个定制的IHttpModule,就可以存储用户的信息,供以后在页面中使用。在一个页面上的两个UserControl实例之间通信。假定编写一个用于横幅广告的UserControl。该控件的两个实例可以从HttpContext.Items中选择广告,防止在同一个页面上显示重复的内容。存储成 阅读全文
posted @ 2013-06-29 00:14 DBNull 阅读(1252) 评论(0) 推荐(0) 编辑
摘要: 在.net 编程环境中,系统的资源分为托管资源和非托管资源。 对于托管的资源的回收工作,是不需要人工干预回收的,而且你也无法干预他们的回收,所能够做的只是了解.net CLR如何做这些操作。也就是说对于您的应用程序创建的大多数对象,可以依靠 .NET Framework 的垃圾回收器隐式地执行所有必要的内存管理任务。 资源分为两种,托管的内存资源,这是不需要我们操心的,系统已经为我们进行管理了;那么对于非托管的资源,这里再重申一下,就是Stream,数据库的连接,GDI+的相关对象,还有Com对象等等这些资源,需要我们手动去释放。 对于非托管资源,您在应用程序中使用完这些非托管资源之... 阅读全文
posted @ 2013-06-27 00:22 DBNull 阅读(354) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2013-05-14 22:00 DBNull 阅读(6) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2011-11-28 10:10 DBNull 阅读(4) 评论(0) 推荐(0) 编辑