随笔 - 136  文章 - 0  评论 - 36  阅读 - 17万 
04 2011 档案
ASP.NET 3.5核心编程学习笔记(46):HTTP模块的编写
摘要:对于每个运行中的应用程序,ASP.NET都维护着一个HttpApplication对象的池,特定的请求会逐一由池中的实例处理。这些对象基于定义在global.asax的类创建,如果未定义global.asax,则基于HttpApplication类创建。负责处理请求的HttpApplication对象的最终目标是获取HTTP处理程序。 在获取目标HTTP处理程序前,HttpApplication对象要使请求流经HTTP模块的管道。HTTP模块是实现IHttpModule接口的.NET Framework类,用于筛选请求的中原始数据。HTTP模块会基于每个应用程序的web.config文件进行. 阅读全文
posted @ 2011-04-30 15:43 辛勤的代码工 阅读(543) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(45):HTTP处理程序之高级编程
摘要:HTTP处理程序的用户十分明确:改变某类资源的处理方式,并将其返回给用户。我们可以通过处理程序基于运行时条件或某种形式的逻辑对传统资源进行筛选,还可使HTTP处理程序以异步方式来返回特定的页面或资源。 对于HTTP处理程序来说,注册是一个关键步骤,它为ASP.NET提供有关处理程序的信息。但我们都需要修改应用程序的web.config文件,以便为ASP.NET应用程序提供处理程序的信息。 通过ASHX扩展和处理程序编程模型,我们可以避免修改web.config。部署新的HTTP处理程序只需要将对应的文件复制到应用程序的某个文件夹下即可。以ASHX资源的形式处理程序 ashx文件包含一个特殊的. 阅读全文
posted @ 2011-04-29 23:17 辛勤的代码工 阅读(444) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(44):HTTP处理程序的编写之从数据库加载图像
摘要:数据库管理系统往往都提供二进制大对象的支持。当然,二进制对象字段不一定非要存储图像,它还可以存储媒体文件或长文本文件或其他二进制内容。 下面以从数据库加载员工相片为例,展示一个HTTP处理程序的例子:public class DbImageHandler : IHttpHandler{ public void ProcessRequest(HttpContext ctx) { //从查询字串中获取员工ID int id = -1; bool reaust = Int32.TryParse(ctx.Request.QueryString["id"], out id); //如 阅读全文
posted @ 2011-04-29 21:38 辛勤的代码工 阅读(332) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(43):HTTP处理程序的编写之图片查看器
摘要:图片查看器处理程序 为加快处理速度,IIS会直接处理Web应用程序中的某些静态资源,而不会调用ISAPI扩展。这些静态文件包括图像和HTML文件。如果从浏览器直接请求gif或jpg文件,IIS会获取指定的资源,正确设置响应缓冲的内容类型,并将其输出成文件的字节流. 如果浏览器地址指向包含多个图像的虚拟目录呢?在这种情况下,IIS无法识别文件夹的内容,而可能只返回文件的列表。 那么如何实现指向该虚拟目录地址,在浏览器中显示该目录下图片的预览呢?图片查看器HTTP处理程序的设计 首先,需要确定如何使IIS知道我们的意图?可以通过在文件夹名称后追加一个特定的端点,使IIS将请求传给ASP.NET,由 阅读全文
posted @ 2011-04-29 18:02 辛勤的代码工 阅读(457) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(42):HTTP处理程序的编写之建立数据报表
摘要:如果要让ASP.NET以某种非标准的方式处理请求,我们可以编写自定义的HTTP处理程序。通过编写处理程序,用户可以通过Web调用各种功能。如,我们可以实现单击计数器和各种图像处理(包括图像的动态生成、服务器端缓存、防止图像盗链)。 HTTP处理程序能够以同步方式工作,也能以异步方式工作。 常规的ISAPI扩展和筛选器应在IIS元库中注册。如果希望HTTP处理程序参与进处理Web请求的HTTP管道,则要在web.config文件中注册它。它的使用方式与ISAPI扩展类似,可以直接通过URL进行调用。IHttpHandler接口 HTTP处理程序是实现IHttpHandler接口的类。更准确的讲. 阅读全文
posted @ 2011-04-28 22:42 辛勤的代码工 阅读(473) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(41):HTTP处理程序与HTTP模块
摘要:HTTP处理程序是真正负责处理请求的组件,它实现了IHttpHandler接口。该接口的ProcessRequest方法是控制请求处理的“中央控制台”。如,Page类实现IHttpHandler接口,它的ProcessRequest方法负责加载和保存视图状态,还负责引发一些常见的事件(Init、Load、PreRender等)。 ASP.NET会将每个传入的HTTP请求映射到相应的HTTP处理程序。HTTP处理程序工厂创建这些处理程序的实例对象(如,PageHandlerFactory类能解析被请求的aspx资源的源代码,编译后返回代表相应页面的类实例)。 HTTP模块是实现IHttpMod. 阅读全文
posted @ 2011-04-28 00:43 辛勤的代码工 阅读(585) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(40):页面缓存
摘要:ASP.NET页面输出缓存功能允许我们对页面的响应进行缓存,这样,无需执行整个页面,后续的请求也会被处理,即只返回缓存的输出。输出的缓存分两个级别:页面的整个和局部。页面缓存很智能,能够基于请求的URL、查询字符串、参数或自定义字符串来保持输出。 输出缓存的配置非常方便,即可通过@OutputCache指令以声明方式配置,也可通过HttpCachePolicy类以编程方式进行配置。 页面输出缓存只针对匿名内容。对缓存的页面请求在IIS6.0下,由IIS直接处理,在IIS5.0下,由ASP.NET工作进程处理。不论哪种情况,页面请求不会进入ASP.NET管道,而只有在管道中才能进行身份验证,因. 阅读全文
posted @ 2011-04-27 01:02 辛勤的代码工 阅读(703) 评论(1) 推荐(1) 编辑
ASP.NET 3.5核心编程学习笔记(39):SQL Server缓存依赖
摘要:针对SQL Server的缓存依赖项 在ASP.NET 2.0及更高版本中,有一个专用的类SqlCacheDependency,该类继承于CacheDependency,支持SQL Server表的依赖项。它兼容于MSDE、SQL Server 7.0和SQL Server的后续版本。数据库依赖项的内幕 时至今日,除SQL Server 2005及更高版本外,没有哪个数据库本身能够检测更改的发生。这表明:对于SQL Server 7.0、SQL Server 2000和非SQL Server数据库,必须创建数据库级的基础结构,以便对表的更改做出提示,允许它们被捕获,并将更改通知给ASP.NET 阅读全文
posted @ 2011-04-26 00:15 辛勤的代码工 阅读(619) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(38):自定义缓存依赖
摘要:自定义缓存依赖项的设计 从ASP.NET 2.0开始,CacheDependency类是可继承的,即我们能够从它派生出自己的类,实现通过外部的事件源使缓存项失效的机制。基类CacheDependency的扩展 为能将派生类整合到现有的ASP.NET缓存基础结构中,并对其提供充分的支持,相对于ASP 1.x版本,CacheDependency类加入了许多公共成员和受保护成员。详见下表: 自定义依赖项要依靠其父类与Cache对象进行交互。CacheDependency的派生类会调用NotifyDependencyChanged方法,以便通知基类依赖项已被更改。作为响应,基类会更新HasChange 阅读全文
posted @ 2011-04-25 23:01 辛勤的代码工 阅读(685) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(37):缓存的使用
摘要:在ASP.NET中,缓存有两种形式:应用程序数据的缓存和页面输出的缓存,这两种形式相互独立。应用程序数据的缓存 ASP.NET缓存API是以Cache对象为中心的全局数据容器,由所有会话共享。Cache对象是线程安全的容器,能自动移除无用的数据项,支持各种形式的信赖关系,还可以指定移除回调和优先级。Cache类 Cache类位于System.Web.Caching命名空间中,可以将Cache看作是应用程序级数据和对象的仓库。 Cache类的实例是针对每个AppDomain而创建的,只要所处AppDomain运行,它就一直有效。应用程序的ASP.NET Cache的当前实例,可以由HttpCo. 阅读全文
posted @ 2011-04-25 21:06 辛勤的代码工 阅读(987) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(36):页面的视图状态和控件状态
摘要:ASP.NET页面提供了ViewState属性,使应用程序能在同一页面的两次连续请求间保存某些数据,并生成调用上下文。视图状态代表页面最近一次接受服务器处理以来的状态。这种状态会被保存(但不一定是在客户端),并在页面请求被处理时恢复。 默认情况下,视图状态以添加到页面中的隐藏字段的形式来维护。因此,状态信息会与页面一起来回传输。视图状态中存储的信息只与页面和其中的某些子控件有关,浏览器不会以任何形式来使用它。 视图状态优点:不需占用任何服务器资源,实现容易,使用方法。缺点:对浏览器无用,增加HTML代码中的冗余数据。StateBag类 StateBag类是视图状态幕后的类,能够管理ASP.N. 阅读全文
posted @ 2011-04-25 13:55 辛勤的代码工 阅读(732) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(35):会话状态的自定义管理
摘要:综合各方面考虑,有3种会话状态管理的自定义方案: 1. 保留默认的会话模块,但编写自定义的状态提供程序来更改存储介质。这样,我们还有机会重写一些用于在存储与Session之间运载会话数据的辅助类。 2. 保留默认的会话模块,但替换会话ID生成器。 3. 将默认的会话状态模块替换成自己的。这种方法提供了最好的灵活性,但也最为复杂,建议仅当的确必要且知道确切的实现方法才使用这种方案。构建自定的会话状态提供程序 会话状态提供程序是一种组件,负责为当前会话数据进行服务。当请求需要状态信息时,该组件便会被调用,从给定的存储介质中获取数据,并返回给主调模块。在请求结束时,也会被调用,以便将提供的数据写入. 阅读全文
posted @ 2011-04-25 00:14 辛勤的代码工 阅读(609) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(34):会话状态的使用
摘要:会话状态处理任务可用三个步骤来概括:分配会话ID,从提供程序获取数据,将数据填充到页面的上下文中。 会话状态模块负责管理所有这些任务的执行。为此,它还需要利用两个组件:会话ID生成器和会话状态提供程序。在ASP.NET 2.0和更高版本中,二者可以由自定义的组件代替。会话的标识 每个活动的ASP.NET会话由15个字节(120位)的字符串标识,其中只包含符合URL标准的字符。会话ID是随机生成的,且是唯一的,以避免恶意攻击和数据冲突。通过某种算法从一个现有的ID推算出一个有效的会话ID几乎是不可能的。会话ID的生成 会话ID的长度为15个字节,由“随机数字生成器(RNG)”密码提供程序生成。. 阅读全文
posted @ 2011-04-24 22:22 辛勤的代码工 阅读(772) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(33):HttpSessionState简介
摘要:对于会话状态值的存储,HttpSessionState类提供了一个基于字典的模型。只有同一会话上下文中的请求(即由同一个用户发出的多个页面请求)才可以访问会话状态。会话状态的存储和发布方式有很多,其中包括在Web Farm和Web Garden环境下的。但在默认情况下,会话状态由ASP.NET工作线程持有。 会话状态的可扩展模型提供了两种方案: 1. 可对ASP.NET现有的会话状态机制进行局部的自定义(如:创建Oracle会话提供程序或创建能控制ID生成的模块)。 2. 可以将整个标准的会话状态HTTP模块替换成其他的自定义会话状态HTTP模块。 第一种方案更容易实现,但可自定义的功能比较. 阅读全文
posted @ 2011-04-24 11:47 辛勤的代码工 阅读(1885) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(32):HttpApplicationState
摘要:ASP.NET提供了4个层面上的状态管理工具:应用程序、会话、页面和请求,每层都有专用的容器对象。应用程序的状态 下表总结了各状态对象的主要功能: 尽管HttpApplicationState和HttpSessionState对象与ASP内部对象Application和Session的名称不同,但在状态方面,它们的功能完全一致。 HttpApplicationState对象可使应用程序中的所有请求处理程序获得一种字典形式的存储对象。所有HTTP处理程序和模块都能够存储和检索应用程序字典中的值。应用程序状态只在当前应用程序的上下文中可见,位于同一系统中的其他应用程序无法访问或更改其中的值。 当. 阅读全文
posted @ 2011-04-24 10:34 辛勤的代码工 阅读(801) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(31):HttpRequest对象
摘要:HttpRequest对象包含了传入Web请求的HTTP数据包中包含的所有信息。HTTP标头、查询字符串、表单的输入字段、路径和URL信息的内容,被分别组织在不同的集合以及其他特殊对象中,能以编程方式便捷地访问。当ASP.NET开始处理Web请求时,HttpRequest对象会被填充,并通过HttpContext的Request属性暴露出来。HttpRequest类的属性 HttpRequest类的属性可被分为三类:请求类型、客户端数据和连接有关请求的信息 下表列出了有关请求信息的属性: HttpBrowserCapabilities对象包含有关浏览器功能的大量信息,包括是否支持Active. 阅读全文
posted @ 2011-04-24 02:16 辛勤的代码工 阅读(870) 评论(1) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(30):HttpResponse对象
摘要:在ASP.NET中,HTTP响应信息由HttpResponse类进行封装。该类的实例创建于处理请求的HTTP管道建立时,之后该实例被链接到与请求关联的HttpContext对象,通过其Response属性暴露。虽然用户定义的ASP.NET代码不需使用HttpResponse的构造函数,但此函数可帮助我们理解该类的本质:public HttpResponse(TextWriter writer); 可以看出,该构造函数接受一个TextWriter对象,该对象用于存储响应文本。对Response.Write的调用都被转换为对TextWriter对象的调用。HttpResponse类的属性 下表列. 阅读全文
posted @ 2011-04-24 01:37 辛勤的代码工 阅读(806) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(29):HttpServerUtility类
摘要:ASP中Server对象的功能,在ASP.NET中由HttpServerUtility类来实现。该类型的实例在AS.NET开始处理请求时创建,之后被存储在请求上下文中。HttpServerUtility拥有大量辅助方法,通过HttpContext对象的Server属性暴露给模块或处理程序(包括global.asax、页面和Web服务)。HttpServerUtility类的属性 该类提供了两个属性:MachineName和ScriptTimeout。MachineName属性能够返回当前服务器的计算机名称。ScriptTimeout属性获取或设置处理请求占用的最长时间(以秒为单位)。该属性接. 阅读全文
posted @ 2011-04-24 00:11 辛勤的代码工 阅读(823) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(28):HttpContext类
摘要:在请求执行链的各个阶段中,会有一个对象在各个对象间进行传递,这就是HttpContext对象。HttpContext封装了ASP.NET要处理的单个HTTP请求的所有信息。在请求处理机制建立时,HttpContext类由HttpRuntime对象实例化。接着,该对象会经历请求生存期的各个阶段。如下图所示:HttpContext类的属性 下表列出了HttpContext类的所有属性。 Current属性是一个十分常用的静态成员,返回当前被处理请求的HttpContext对象。 Items属性是一个字典对象(更准备地说,它是一个哈希表),使数据可以在某个请求所涉及的模块和处理程序间共享。这些数据. 阅读全文
posted @ 2011-04-23 22:29 辛勤的代码工 阅读(746) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(27):global.asax文件
摘要:通过global.asax,Web应用程序能够处理某些由ASP.NET运行库或已注册的HTTP模块引发的应用程序级事件。为使该文件中的内容生效,global.asax文件必须置于应用程序的根目录下。global.asax的编译 如果定义了global.asax文件,那么在应用程序启动时,该文件会被解析为源类,并会被编译。下面是ASP.NET根据global.asax文件生成的C#代码:namespace ASP{ public class global_asax : System.Web.HttpApplication { ...... }} 该类称为ASP.global_asax,派生自H. 阅读全文
posted @ 2011-04-23 15:31 辛勤的代码工 阅读(940) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(26):HttpApplication对象
摘要:应用程序的初始化 一旦请求上下文被创建,HttpRuntime类便会建立处理请求的ASP.NET应用程序对象。ASP.NET应用程序由许多HttpApplication类的实例组成。HttpApplication是根据global.asax文件派生的对象,能够处理转到特定虚拟文件夹的所有HTTP请求。 运行中的ASP.NET应用程序完全由其虚拟文件夹表示的,且global.asax文件是可选的。虚拟文件夹的名称是一种键,HTTP运行库通过它来确定应该由哪个应用程序来处理传入的请求。 请求会被分配给某个HttpApplication对象,此后便由这个选定的对象来负责管理请求的整个生存期。只有在请 阅读全文
posted @ 2011-04-23 10:20 辛勤的代码工 阅读(506) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(25):GridView控件
摘要:几乎不需缩写代码的双向数据绑定是GridView控件最瞩目的功能,但其他相对于DataGrid的改进之处也不胜枚举,这些改进包括:可定义多个主键字段、新的列类型、样式和模板选项。GridView的属性 GridView的SortDirection和SortExpression属性用于指定当前列排序的方向和排序表达式。当用户单击某个列的标头时,这两个属性会由该控件的内建排序机制设置。整个排序引擎的开关取决于AllowSorting属性。EnableSortingAndPagingCallbacks属性用于指示该控件是否使用脚本回调功能进行分页和排序,有了该功能,我们不必执行到服务器的往返交互,. 阅读全文
posted @ 2011-04-22 13:05 辛勤的代码工 阅读(1450) 评论(1) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(24):DataGrid控件
摘要:DataGrid控件的显著特征是Columns和Items集合属性及样式和数据绑定属性。Items属性返回DataGridItem对象的集合,每个元素对应显示出来的行。DataGridItem类是TableRow类的子类,对其进行了细化。 DataGird控件的输出由几种元素组成:Header(标头)、Item(显示项)、Alternating Item(交替显示项)、Footer(页脚)、Pager(导航栏)。 DataKeyField属性提供了底层数据源的主键字段,DataKeys集合属性提供了各行的主键值。DataKeys集合会基于DataKeyField属性值和绑定数据源自动填充。 . 阅读全文
posted @ 2011-04-20 23:10 辛勤的代码工 阅读(1716) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(23):Linq-to-SQL 数据的更新、事务、存储过程、函数
摘要:一旦实体对象被加载到内存中,插入新订单的工作就非常简单,无非是创建Order类的实例并将其添加到客户对象的Orders集合中。Linq-to-SQL会跟踪数据上下文中的更改,并在调用数据上下文对象的SubmitChanges时将那些更改传回数据库。下例显示了一个更改数据的过程:string id = "ALFKI";Customer c = dataContext.Customers.SingleOrDefault(c => c.CustomerID == id);if(c != null){ //修改数据 c.Address = "123 Flowers 阅读全文
posted @ 2011-04-20 17:56 辛勤的代码工 阅读(632) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(22):LINQ与SQL的交互、延迟加载与预加载
摘要:LINQ查询运算符可以处理内存中可查询的.NET类型实例。可查询的.NET类型是指那些实现IEnumerable接口或继承于IQueryable<T>泛型接口的类型。数组List、Dictionary及.NET Framework中的其他集合类型都是可查询的。 XML和DataSet不能直接查询,因为二者都没实现IEnumerable接口。为此,在使用前,我们需要对它们进行特殊处理,该过程会调用DataSet上的AsEnumerable方法和XML文档的XDocument.Load方法时执行。 LINQ与SqlCommand对象不同的是,在开始对数据进行操作时,查询才会隐式地执行。 阅读全文
posted @ 2011-04-20 15:54 辛勤的代码工 阅读(674) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(21):LINQ查询语法
摘要:从本质上讲,Linq-to-SQL能够将类与方法映射到数据源对象上。LINQ概述 大多数应用程序以某种数据仓库为中心。多年来,架构师在设计应用程序的过程中,一直通过对象对问题域进行建模。这些对象包括用于连接到数据访问层的连接,来艰难地与数据库进行交互,并通过对象模型建立关系模式。但这种方式对于简单的应用程序显得有些繁琐。 LINQ的出现就是为了解决这些简单应用程序的需求,为其提供一套功能强大且易用的工具,能在更高的概念层上对数据存储进行操作。 .NET 3.5版本中的编程语言能进行局部类型推断,var关键字正是为此而引入的。从本质上讲,它允许我们声明一个变量,而不指定实现的类型。编译器会根据. 阅读全文
posted @ 2011-04-19 18:07 辛勤的代码工 阅读(627) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(20):ObjectDataSource控件
摘要:ObjectDataSource类可将用户定义的类中方法的输出与数据绑定控件相关联。ObjectDataSource类对其所封装的类有一定的要求,并不是所有的类都能配合该数据源控件使用。具体来讲,可绑定类必须有默认的无参数构造函数,方法在语义上对应选择、更新、插入和删除操作。此外,该对象每次只能更新一项,不支持对其状态进行指更新。ObjectDataSource的编程接口 ObjectDataSource组件基本提供了SqlDataSource的编程接口,此外还添加了3个事件和几个属性。ObjectDataSource能引发的事件与其所绑定的底层业务对象的生存期有关--ObjectCreat. 阅读全文
posted @ 2011-04-19 13:48 辛勤的代码工 阅读(789) 评论(0) 推荐(1) 编辑
ASP.NET 3.5核心编程学习笔记(19):数据源组件、SqlDataSource控件
摘要:数据源控件代表若干已命名的数据视图,每个视图能管理一个数据集合。该数据与数据源控件关联,通过SQL式的操作(Select、Insert、Delete和Count)进行管理,能够实现排序与分页。数据源控件有两种--表格式数据源和层次型数据源。下表对数据源控件做了简要说明: 注意,SqlDataSource类并不只针对SQL Server,它还可以连接到任何能够管理关系型数据的ADO.NET提供程序。层次型数据源控件参见下表: 注意,数据源控件不会被显示在页面上,它们之所以被实现为控件是为了“以声明方式存在”(在请求的处理过程中被实例化),作为aspx源代码的原始部分,以便能访问页面的视图状态。. 阅读全文
posted @ 2011-04-19 11:55 辛勤的代码工 阅读(598) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(18):数据绑定表达式
摘要:简单数据绑定 数据绑定表达式是由<%...%>包裹的可执行代码,以#号为前缀。它可以通过DataBoundLiteralControl类的实例以编程方式加以管理。 数据绑定表达式通常从数据源获取数据,但并不是说它一定要从数据源获取数据,只要返回绑定的数据,任何可执行代码都是可以接受的。它仅在控件的DataBinding事件被触发时才执行计算。 示例:<asp:label runat="server" Text='<%# DataTime.Now %>' /> 如果要对表达式用引号,应选择单引号。 我们在页面中定义的数据绑定 阅读全文
posted @ 2011-04-18 16:23 辛勤的代码工 阅读(887) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(17):基于数据源的数据绑定
摘要:从总体上讲,ASP.NET数据绑定模型可以分为三部分:数据绑定表达、传统数据源、数据源控件。可用的数据源 在ASP.NET中,任何一个暴露IEnumerable接口的对象,都是有效的可绑定数据源。IEnumerable接口定义了一个用于枚举数据源内容的方法:public interface IEnumerable{ IEnumerator GetEnumerator();} 具体来讲,我们可以将Web控件绑定到以下类上: 1. ADO.NET容器类(如:DataSet、DataTable、DataView) 2. 数据读取器 3. 自定义的集合、字典、数组 DataSet和DataTable. 阅读全文
posted @ 2011-04-18 12:26 辛勤的代码工 阅读(863) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(16):DataTable、DataView
摘要:DataTable对象 下面的代码演示了如何在DataSet中创建表: DataSet ds = new DataSet(); //创建表 DataTable table = new DataTable(“Employees”); table.Columns.Add(“ID”, typeof(int)); table.Columns.Add(“Name”, typeof(string)); //添加行数据 DataRow row = table.NewRow(); row[“ID”] = 1; row[“Name”] = “Joe”; table.Rows.Add(row); //将表添加到D 阅读全文
posted @ 2011-04-17 17:40 辛勤的代码工 阅读(813) 评论(0) 推荐(1) 编辑
ASP.NET 3.5核心编程学习笔记(15):DataSet
摘要:DataSet类是ADO.NET对象模型中的主要组件,ADO.NET容器类与使用的数据源无关,也不保存任何与特定数据源有关的信息。DataSet对象 DataSet对象实现了3个重要的接口: 1.IListSource使其能返回元素的可绑定数据列表。 2. ISeralizable使其能够控制数据序列化的方式,以便传给.NET格式化程序。 3. IXmlSerializable使其能将自身序列化为XML。 下表列出了DataSet类的属性: Namespace和Prefix属性会影响DataSet将自身序列化为XML的方式。DataSet的名称用于设置XML文档的根节点。如果DataSetN. 阅读全文
posted @ 2011-04-17 17:19 辛勤的代码工 阅读(665) 评论(0) 推荐(1) 编辑
ASP.NET 3.5核心编程学习笔记(14):DataAdapter
摘要:数据适配器 数据适配器对象充当数据源与DataSet对象间的双向桥梁。DataSet是一种非连接的数据容器,适配器负责对它进行填充,并能把它的数据提交给特定的数据源。 命令与数据适配器最大的不同在于获取数据后的返回方式。查询命令能返回一种只读、只进的游标—数据读取器。数据适配器能执行数据访问,获取所有数据,并将其打包在内存容器中—DataSet或DataTable。其实,数据适配器是一种额外的抽象层,构建于命令/数据读取器对之上。数据适配器在内部会使用命令进行查询,使用数据读取器遍历所有记录,并填充给用户的DataSet。SqlDataAdapter类 数据适配器类继承于DbDataAdapt 阅读全文
posted @ 2011-04-17 17:01 辛勤的代码工 阅读(677) 评论(1) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(13):SQL Server 2005中特有的改进
摘要:获取自定义类型 SQL Server 2005支持所有CLR类型,除默认类型外,我们还可在SQL Server中存储和获取任何有效的.NET类型对象。其中包括系统类型(如Point)和用户定义的类。下面的代码演示了如何从表(MyCustomers)中获取用户自定义类(Customer)实例: String cmdText = “Select CustomerData From MyCustomers”; SqlConnection conn = new SqlConnection(connStr); using(conn) { SqlCommand cmd = new SqlCommand(c 阅读全文
posted @ 2011-04-17 16:31 辛勤的代码工 阅读(480) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(12):SqlCommand、SqlDataReader、事务
摘要:命令的执行 ADO.NET对象模型提供物两种类型的命令对象:一种是一次性的命令,另一种是数据适配器。一次性命令用于执行SQL命令或存储过程,返回的是一种游标。如果使用游标,那么连接必须处于打开状态。数据适配器是一个功能更强大的对象,内部使用的也是命令和游标。它用于获取数据,并将其加载到容器类中—DataSet或DataTable。客户端应用程序可以在不与数据源连接的情况下处理数据。SqlCommand类 SqlCommand代表SQL Server语句或存储过程,派生自DbCommand类,实现了IDbCommand和ICloneable接口。命令在连接上下文中执行,也可使用事务。其构造函数如 阅读全文
posted @ 2011-04-17 16:18 辛勤的代码工 阅读(986) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(11):SqlConnection、连接池
摘要:.NET数据提供程序的构成 .NET数据提供程序的功能分为两类:非连接的数据支持、连接的数据支持。 下表列出了.NET数据提供程序的主要组件: 上表中组件的实现是基于一组接口定义的方法和属性,见下表:提供程序工厂模型 从2.0版本开始,ADO.NET提供程序的架构得到了改进,引入了工厂类。每种.NET数据提供程序都包含继承于基类DbProviderFactory的工厂类。工厂类代码各自指定提供程序的公共入口,下表列出了工厂类的主要方法: 如果获取某种提供程序的工厂呢?我们可使用一个新引入的类DbProviderFactoryies,该类有几个静态方法。示例代码: DbProviderFacto 阅读全文
posted @ 2011-04-17 15:24 辛勤的代码工 阅读(1157) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(10):母版页
摘要:母版页是一种由应用程序级(和页面级)引用的特殊文件,包含页面的静态布局。每个子页面可自定义区域,引用母版页中特殊的占位符控件。子页面是代码块的结合,运行库会用它们来填充母版页。母版页的内容会合并到内容页中,二者合在一起动态生成新的页面类,响应用户请求。合并的过程发生在编译时,且只发生一次。母版页与内容页的处理 母版页的使用使页面的处理和编译方式发生了少许变化。首先,基于母版页的页面有两个依赖项:内容页面的aspx源文件和母版页的master文件。如果两个页面中任意一个被更改,动态页面程序集都会被重建。虽然用户需要的URL为内容页,但发往浏览器的最终页面还需要使用母版页,并由内容页提供相应的替. 阅读全文
posted @ 2011-04-16 11:39 辛勤的代码工 阅读(775) 评论(0) 推荐(1) 编辑
ASP.NET 3.5核心编程学习笔记(9):用户配置文件
摘要:用户配置文件简介 在最抽象的层面,用户配置文件是一种由ASP.NET运行库组织到动态生成类中的属性集合。配置文件数据会按不同的用户分别保存。当程序运行页面被显示时,ASP.NET会动态创建配置文件对象,它包含开发者定义在数据模型中的相应类型的属性。该对象之后被添加到HttpContext对象中,可通过Profile属性获取。数据模型的定义 为使用ASP.NET配置文件,我们需要先确定所要使用的数据模型结构,然后将该数据模型通过配置文件附在页面中。用户配置文件的布局定义在web.config文件中。 示例代码:<system.web> ...... <profile> & 阅读全文
posted @ 2011-04-16 09:48 辛勤的代码工 阅读(578) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(8):错误处理、页面跟踪
摘要:页面错误的处理 ASP.NET提供了两级全局异常拦截点,分别位于页面级与应用程序级。 基类Page暴露了一个Error事件,我们可在页面中重写它,捕获页面执行期间引发的未处理异常。 HttpApplication类中也有Error事件,用于捕获整个应用程序中抛出的所有未处理异常。页面级错误处理 为捕获特定页面的未处理异常,我们需要定义Error事件的处理程序,如下所示:protected void Page_Error(object sender, EventArgs e){ Exception ex = server.GetLastError(); if(ex is NotImplement 阅读全文
posted @ 2011-04-16 08:19 辛勤的代码工 阅读(724) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(7):单窗体、多窗体、跨页投递、重定向
摘要:单窗体界面(Single-Form Interface) 在SFI模型中,每个页面总是投递给自己,而没有为开发者设置最终回发目的地的接口。 从ASP.NET 2.0版开始,可通过“跨页投递API”向其他页面投递窗体数据。 与HTML和ASP编程中窗体的Action属性使用URL不同,HTTP方法和回发的目标框架能够通过HtmlForm属性以编程方式确定。HtmlForm类 HtmlForm的父类HtmlContainerControl为窗体提供了容纳子控件的功能,该功能也由其他可包容子元素且带有结束标签特性的HTML类(如HtmlTable)共享。 HtmlForm类提供了在服务器端以编程方式 阅读全文
posted @ 2011-04-15 23:14 辛勤的代码工 阅读(746) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(6):Web控件
摘要:Web控件都定义在System.Web.UI.WebControls命名空间中。与HTML控件不同的是,Web控件提供的编程接口对传统的HTML属性和事件集合进行了重构。为此,Web控件在API的设计方面有时会显得更一致、更抽象,功能也更丰富。位于aspx页面中的Web控件都带有asp命名空间前缀。Web控件的通性 WebControl类是所有Web控件的基类。Web控件的属性 ControlStyle和ControlStyleCreated属性主要由控件开发者使用,Style属性通常供应用程序开发者用于设置当前控件的外部控件CSS属性。Style属性是通过CssStyleCollectio. 阅读全文
posted @ 2011-04-15 22:09 辛勤的代码工 阅读(558) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(5):HTML控件
摘要:代码片段: <input runat="server" id="lastName" type="text" value="Test"/> 经过ASP.NET运行库处理后,上述声明生成以下HTML代码: <input name="myName" id="myName" type="text" value="Text" /> 注意:服务器端ID属性被展开为两个HTML属性:Name和ID。这是考虑到浏览器的兼容性。但 阅读全文
posted @ 2011-04-15 21:40 辛勤的代码工 阅读(878) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(4):服务器控件简介
摘要:runat属性是ASP.NET控件编程的关键。如果aspx源码中的标签在声明时没有带runat属性,那么它将被视为纯文本并逐字输出。否则,该标签的内容会被映射到服务器控件上,在页面的生命周期中进行处理。两大类服务器控件 HTML服务器控件:通过服务器端的类,HTML控件被映射为HTML标签,这些编程接口如实表现了相应HTMP标签的属性集合。 Web服务器控件:Web控件更抽象,其API没有严格遵循HTML语法。功能上讲,Web控件是HTML控件的扩展集。Web控件带有更多的方法、属性、事件,能更充分参与页面生命周期。ASP.NET服务器控件的通性 所有ASP.NET服务器控件都继承自Syst. 阅读全文
posted @ 2011-04-12 12:25 辛勤的代码工 阅读(651) 评论(0) 推荐(0) 编辑
ASP.NET 3.5核心编程学习笔记(3):页面的生命周期
摘要:每次客户端请求都会创建页面实例,它的执行使自身及其包含的控件经历页面生命周期的各个阶段。页面的执行起始于HTTP运行库调用ProcessRequest时,该方法将启动页面并控制它的生命周期。 页面的生命周期可分为三个阶段:建立阶段、回发阶段、终结阶段。每个阶段会有子阶段,分别由若干步骤和事件引发点组成。页面的建立 当HTTP运行库实例化一个页面类对当前请求进行处理时,页面的构造函数会生成一个控件树,该控件树会关联到实际的类,这些类是由页面解析器在扫描ASPX源代码后创建的。当请求的处理过程开始时,所有子控件和页面的内部对象(如HTTP上下文对象、请求对象和响应对象等)都会被设置。 页面生命周. 阅读全文
posted @ 2011-04-11 22:05 辛勤的代码工 阅读(665) 评论(0) 推荐(1) 编辑
ASP.NET 3.5核心编程学习笔记(2):Page类
摘要:System.Web.UI.Page类提供了ASP.NET应用程序从aspx文件创建的所有对象的基本行为,该类派生自TemplateControl并实现了IHttpHandler接口。 TemplateControl是抽象类,为ASP.NET页面和用户控件提供了一组基本的功能。该类的上一层次为Control类,Control类定义了由ASP.NET服务器端元素(页面、控件和用户控件)共享的属性、方法和事件。 TemplateControl类实现了INamingContainer接口,因此,Page类还是其所有子控件的“命名容器”。控件的命名容器是实现INamingContainer接口的第一. 阅读全文
posted @ 2011-04-11 01:11 辛勤的代码工 阅读(967) 评论(0) 推荐(1) 编辑
ASP.NET 3.5核心编程学习笔记(1):ASP.Net页面请求处理流程
摘要:页面的编译 特定.aspx资源的程序集的生成分为两个步骤进行。首先,该资源文件的源代码会被解析,根据得到的信息,从Page类(或Page的派生类)派生出相应的类。然后,动态生成的类会被编译为程序集,该程序集之后会被缓存到ASP.Net专用的临时目录下。 只要链接的aspx源文件没有被更改,且整个应用程序没有重启,已编译的页面就一直存在。对已链接aspx文件的任何更改,将使相关程序集变为无效,并在该页面下一次被请求时,强制HTTP运行库创建新的程序集。 编辑web.config和global.asax之类的文件会导致整个应用程序重启。在这种情况下,在某个页面被请求时,所有页面会被重新编译。如果b 阅读全文
posted @ 2011-04-10 23:19 辛勤的代码工 阅读(1346) 评论(1) 推荐(2) 编辑
Linq To Sql 笔记
摘要:Linq To SQL 无非是把合法的Linq查询表达式应用于存储在关系数据库中的数据。除查询本身外,Linq To SQL还提供了许多位于System.Data.Linq.dll程序集中的类型,便于代码库与物理数据库引擎间的数据交互。 Linq To SQL的主要目的是在关系数据库和它们进行的交互编程逻辑间提供一致性。通过使用Linq查询表达式和定义的实体类,及DataContext类型,你可以进行所有预期的数据库的增、删、改、查操作,及定义事务性上下文,创建新的数据库实体或整个数据库、调用存储过程和其他以数据库为中心的活动等。 此外,Linq To SQL中的类型可与标准的ADO.NET. 阅读全文
posted @ 2011-04-07 12:36 辛勤的代码工 阅读(538) 评论(2) 推荐(0) 编辑
Linq To DataSet笔记
摘要:回顾DataSet和DataTable 使用各种DataSet和DataTable索引器时,可通过一种相当直接却是弱类型的方式来数据交互。例如:static void PrintDataWithIndexers(DataTable dt){ //输出DataTable for(int curRow = 0; curRow < dt.Rows.Count; curRow++) { for(int curCol = 0; curCol < dt.Columns.Count; curCol++) { Console.Write(dt.Rows[curRow][curCol].ToStri 阅读全文
posted @ 2011-04-07 10:53 辛勤的代码工 阅读(579) 评论(0) 推荐(0) 编辑
C#对象序列化
摘要:要让一个对象支持.Net序列化服务,用户必须为每一个关联的类加上[Serializable]特性。如果类中有些成员不适合参与序列化(比如:密码字段),可以在这些域前加上[NonSerialized]特性。 C#支持三种序列化格式:二进制格式(使用BinaryFormatter序列化器)、SOAP格式(使用SoapFormatter序列化器)、XML格式(使用XmlSerializer序列化器)。这三种序列化器的区别如下: 二进制格式可序列化一个类型的所有可序列化字段,不管它是公共字段还是私有字段。SOAP格式和XML格式仅能序列化公共字段或拥有公共属性的私有字段,未通过属性公开的私有字段将被. 阅读全文
posted @ 2011-04-06 17:57 辛勤的代码工 阅读(1457) 评论(0) 推荐(0) 编辑
C#多线程编程之:BackgroundWorker
摘要:可能您会觉得使用委托的BeginInvoke方法实现异步操作太过繁琐了,我们在多数情况下仅仅是希望启动一个线程进行一些工作,完成后执行一个回调函数就OK了,并没有太多其他的需求。有没有更方便的方法实现异步操作呢?就像事件那样简单,注册一个异步操作函数,待函数执行完毕后再自动执行一个回调函数,而异步线程启动、运行、结束之类的操作都由程序自动完成。答案是有的,这就是System.ComponentModel.BackgroundWorker类的功能。 我们先看代码:using System;using System.Collections.Generic;using System.Text;us. 阅读全文
posted @ 2011-04-06 14:50 辛勤的代码工 阅读(2332) 评论(0) 推荐(2) 编辑
使用Enumerable.OfType<T>扩展方法实现非泛型集合的Linq查询
摘要:Linq查询运算符设计用于任何实现了IEnumerable<T>接口的类型。但System.Collections中传统的非泛型容器类未实现IEnumerable<T>接口,在这些非泛型容器上怎样执行Linq查询呢? 我们可以使用扩展方法Enumerable.OfType<T>()扩展方法将非泛型容器转换为IEnumerable<T>类型后,再执行查询。Enumerable.OfType<T>扩展方法的原型为: public static IEnumerable<T> OfType<T>(this IEnume 阅读全文
posted @ 2011-04-05 21:34 辛勤的代码工 阅读(437) 评论(0) 推荐(0) 编辑
Linq查询的延迟执行
摘要:Linq查询表达式在我们迭代内容前,不会真正进行运算,这叫做延迟执行。这种方式的好处是可以为相同的容器多次应用相同的Linq查询,而始终获得最新的结果。 示例代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace TestVar{ class Program { //Linq查询的延迟执行示例 static void Main(string[] args) { int[] intAry = new int[] { 1, 2, 3, 4, 5, 6 }; //为. 阅读全文
posted @ 2011-04-05 21:04 辛勤的代码工 阅读(504) 评论(0) 推荐(0) 编辑
C#3.0语法新特性集合
摘要:隐式类型局部变量 C#3.0提供了一个新的关键字var,使用该关键字,编译器会根据用于初始化局部变量的初始值推断出变量的数据类型。 示例代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace TestVar{ class Program { static void Main(string[] args) { //定义int数组 int[] intAry = new int[] { 1, 2, 3, 4, 5, 6 }; //var varSet = intAry 阅读全文
posted @ 2011-04-05 18:31 辛勤的代码工 阅读(468) 评论(0) 推荐(0) 编辑
委托、匿名方法、Lambda表达式的演进
摘要:假设给我们一个泛型对象List<T>,T为int类型,要求我们使用该对象方法FindAll(Predicate<T> match)从中找出该List中的偶数,您如何实现? 说明一下:Predicate<T>是一个泛型委托,它的原型为public delegate bool Predicate<T>(T obj),该委托传入一个T类型对象,经逻辑判断后返回布尔值。委托 可能您首先想到的是用委托实现,实现方法如下: //方法1 static void Method1() { //创建List<int>对象 List<int> 阅读全文
posted @ 2011-04-05 14:38 辛勤的代码工 阅读(608) 评论(1) 推荐(0) 编辑
C#多线程编程之:异步事件调用
摘要:当一个事件被触发时,订阅该事件的方法将在触发该事件的线程中执行。也就是说,订阅该事件的方法在触发事件的线程中同步执行。由此,存在一个问题:如果订阅事件的方法执行时间很长,触发事件的线程被阻塞,长时间等待方法执行完毕。这样,不仅影响后续订阅事件方法的执行,也影响主线程及时响应用户的其他请求。如何处理这个问题呢?讲到此,我想您已经想到了,那就是异步事件调用。 怎样实现异步事件调用呢?如果您对事件比较了解的话,您应该知道事件的本质其实是一种MulticastDelegate(多播委托)。MulticastDelegate类提供了一个GetInvocationList方法,该方法返回此多播委托的委托. 阅读全文
posted @ 2011-04-04 16:46 辛勤的代码工 阅读(8630) 评论(0) 推荐(1) 编辑
C#多线程编程之:异步方法调用
摘要:异步方法 当一个线程调用方法后,直到方法执行完毕,线程才继续执行,这种方法被称为同步方法。然而,有些方法执行时间可能非常长,比如串口操作或访问网络,这样线程被阻塞,而无法响应用户的其他请求。这种情况通常是无法忍受的,所以这时我们应该使用异步方法。 异步方法的原理是,在方法调用前为异步方法指定一个回调函数,方法调用后被线程池中的一个线程接管,执行该方法。主线程立即返回,继续执行其他工作或响应用户请求。如果异步方法执行完毕,回调函数被自动执行,以处理异步方法的调用结果。 如何实现异步方法呢?C#通过异步委托调用BeginInvoke和EndInvoke方法来实现异步方法。BeginInvoke方法 阅读全文
posted @ 2011-04-04 11:17 辛勤的代码工 阅读(6037) 评论(0) 推荐(2) 编辑
C#多线程编程之:使用ReaderWriterLock类实现多用户读/单用户写同步
摘要:使用Monitor或Mutex进行同步控制的问题:由于独占访问模型不允许任何形式的并发访问,这样的效率总是不太高。许多时候,应用程序在访问资源时是进行读操作,写操作相对较少。为解决这一问题,C#提供了System.Threading.ReaderWriterLock类以适应多用户读/单用户写的场景。该类可实现以下功能:如果资源未被写操作锁定,那么任何线程都可对该资源进行读操作锁定,并且对读操作锁数量没有限制,即多个线程可同时对该资源进行读操作锁定,以读取数据。如果资源未被添加任何读或写操作锁,那么一个且仅有一个线程可对该资源添加写操作锁定,以写入数据。简单的讲就是:读操作锁是共享锁,允许多个. 阅读全文
posted @ 2011-04-04 09:44 辛勤的代码工 阅读(2350) 评论(1) 推荐(1) 编辑
C#多线程编程之:使用Semaphore类限制资源并发访问数
摘要:考虑这样的一个场景:一个停车场的只含一定数量的停车位,只有当停车场中还有空位时,停车场的入口才会打开。C#提供了Semaphore类来处理这种场景。Semaphore类可以在构造时指定资源数量,使用WaitOne方法等待一个资源,使用Release方法释放一个资源。示例代码:using System;using System.Threading;namespace ProcessTest{ class Program { static Semaphore semaphore; static void Main(string[] args) { //创建一个限制资源类 //资源数为5,开放资源. 阅读全文
posted @ 2011-04-03 23:39 辛勤的代码工 阅读(1829) 评论(0) 推荐(0) 编辑
C#多线程编程之:Interlocked类操作
摘要:System.Threading.Interlocked类为多个线程共享的变量提供原子操作。为整型类提供原子类操作 经验显示,那些需要在多线程情况下被保护的资源通常是整型值,且这些整型值在多线程下最常见的操作就是递增、递减或相加操作。Interlocked类提供了一个专门的机制用于完成这些特定的操作。这个类提供了Increment、Decrement、Add静态方法用于对int或long型变量的递增、递减或相加操作。 示例代码:using System;using System.Threading;namespace ProcessTest{ class Program { static i. 阅读全文
posted @ 2011-04-03 22:49 辛勤的代码工 阅读(4070) 评论(2) 推荐(1) 编辑
C#多线程编程之:volatile关键字的原理探讨
摘要:volatile关键字 volatile关键字仅应用于类或结构字段,用于通知编译器,将有多个线程访问该字段,因此它不应当对此成员的状态做任何优化,这样可以确保该字段在任何时间呈现的都是最新的值。 不是所有的类型都可以被定义为volatile字段,只有以下类型才可被定义为volatile:引用类型。指针类型(在不安全的上下文中)。整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。具有整数基类型的枚举类型。已知为引用类型的泛型类型参数。IntPtr 和 UIntPtr。 注意观察一下,就能发现只有值或引用的位数不超过本机整型值的位数(在 阅读全文
posted @ 2011-04-03 20:31 辛勤的代码工 阅读(1587) 评论(0) 推荐(1) 编辑
使用Process类避免在一台机器上运行同一程序的多个实例
摘要:System.Diagnostics.Process类的实例可以引用一个进程,被引用的进程包含以下几种:该实例的当前进程。本机上除了当前进程的其他进程。远程机器上的某个进程。创建或销毁子进程 示例代码:using System;using System.Collections.Generic;using System.Text;using System.Diagnostics;using System.Threading;namespace ProcessTest{ class Program { static void Main(string[] args) { //创建一个记事本子进程. 阅读全文
posted @ 2011-04-03 18:45 辛勤的代码工 阅读(608) 评论(0) 推荐(0) 编辑
C#面试题集
摘要:网上收集的面试题,自己做了一下,改了些小错。1. 简述 private、 protected、 public、 internal 修饰符的访问权限。答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一程序集内可以访问。2. 列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Tran 阅读全文
posted @ 2011-04-02 17:51 辛勤的代码工 阅读(741) 评论(1) 推荐(0) 编辑
Microsoft.Net框架程序设计学习笔记(39):反射
摘要:先绑定类型,然后调用方法的方式通常称为晚绑定。而早绑定指一个应用程序使用的类型和方法在编译时就已确定。 System.Reflection.Assembly类型提供了三个静态方法允许我们显式加裁一个程序集:Load(通过接受一个程序集标识来加载程序集,可加载弱程序集和强程序集)、LoadFrom(通过接受一个程序集文件完整路径名称加载程序集,仅能加载弱程序集)、LoadWithPartialName。我们应该尽可能使用Load方法,避免使用LoadFrom、LoadWithPartialName。 System.AppDomain也提供一个Load方法,该方法是一个实例方法,允许我们将一个程. 阅读全文
posted @ 2011-04-01 21:56 辛勤的代码工 阅读(394) 评论(0) 推荐(0) 编辑
Microsoft.Net框架程序设计学习笔记(38):CLR寄宿和应用程序域
摘要:CLR寄宿 开发CLR时,微软实际上是将其作为一个COM服务器实现在了一个DLL内。也就是说,微软为CLR定义了一个标准的COM接口,并且为该接口和COM服务器分配了GUID。我们安装.NET框架时,表CLR的COM服务器就像其他的COM服务器一样被注册到了Windows的注册表里。 任何Windows应用程序都可以寄宿CLR。我们的非托管宿主(如Windows PE文件格式,其或为一个Windows Exe文件,或为一个动态连接库DLL文件)可以调用CorBindToRuntimeEx函数(其原型定义在MSCorEE.h中)。CorBindToRuntimeEx函数实现在MSCorEE.dl 阅读全文
posted @ 2011-04-01 13:23 辛勤的代码工 阅读(467) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示