﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-wsky‘s blog</title><link>http://www.cnblogs.com/wsky/</link><description>专注于.NET的学习和开发.</description><language>zh-cn</language><lastBuildDate>Fri, 29 Aug 2008 02:02:12 GMT</lastBuildDate><pubDate>Fri, 29 Aug 2008 02:02:12 GMT</pubDate><ttl>60</ttl><item><title>AOP-&gt;动态代理-&gt;Emit</title><link>http://www.cnblogs.com/wsky/archive/2008/05/21/1204379.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Wed, 21 May 2008 14:54:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/05/21/1204379.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1204379.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/05/21/1204379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1204379.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1204379.html</trackback:ping><description><![CDATA[认识AOP，因为它所具有的吸引力，AOP（面向方面）让我们只需要关注我们需要关注的那个方面，把无关业务的方面剥离，<BR>RT，是一个对AOP的.net实现逐渐深入的认识过程，<BR><BR>在。net下实现AOP有这么几种思路：（仅是收集网上所提到的部分）<BR><BR>1.使用ContextAttribute和ContextBoundObject来对对象的方法进行拦截。<BR>.net的上下文context就可看做是AOP的一种实现，可看看这篇<A href="/TomCat007/archive/2008/05/19/1202845.html" target=_blank>http://www.cnblogs.com/TomCat007/archive/2008/05/19/1202845.html</A> 上下文拦截，再回忆一下AOP的思想，你会突然发现这不就是一个实践。<BR><BR>2.使用Emit来，在运行时刻动态构建被织入代码后的类，当程序调用被织入类时，实际上调用的是被修改后的类。<BR>如果你熟悉IL，那就对它不会陌生，它能实时在IL中发射发入IL代码，在MSDN里可以查到它的应用，“将指令放到实时 (JIT) 编译器的 Microsoft 中间语言 (MSIL) 流上。”这是MSDN的解释，这便是实现动态织入的关键了，顺带查询一下OpCode，这也是必须知道的，它是用来描述IL指令的一个结构，也就是说它便是指令。<BR><BR>这种方式相较于单纯的反射取得方法，效率性能上超出很多，基本上和手写代码是一样的。<BR><BR>3.使用Proxy模式<BR>代理模式实现AOP，通过拦截来实现AOP，大部分现有的成熟框架是采用了这种方式，比如Castle project的动态代理(另外Castle的IOC容器基于动态代理技术是指动态织入，因而不存在性能问题)；这种方式多是要求被拦截的对象要继承自指定类以实现拦截机制，<BR>实现例子可参考：<BR><A href="/woodhead/archive/2006/02/08/324312.html" target=_blank>http://www.cnblogs.com/woodhead/archive/2006/02/08/324312.html</A> 这是该作者自行实现的拦截，比较粗糙，但是体现了思路<BR><A href="/mixiaobo/articles/291115.html" target=_blank>http://www.cnblogs.com/mixiaobo/articles/291115.html</A> 这是利用Castle的动态代理技术实现的应用<BR><BR><BR><BR>最后来讨论Emit，如果你是第一次听说它，那么想必它提供的功能会让你很迷惑，但是如果看到了它所能做的事，你一定会很振奋的，动态的生成一个类，动态的实现一个方法，一个接口，没有工厂模式里的让人头痛的反射，<BR><A href="http://yzh.spaces.live.com/Blog/cns!E7D95A34BE5738F4!177.entry" target=_blank>http://yzh.spaces.live.com/Blog/cns!E7D95A34BE5738F4!177.entry</A><BR><A href="http://www.moon-soft.com/doc/23252.htm" target=_blank>http://www.moon-soft.com/doc/23252.htm</A><BR>给出两个Emit的实例，会更好的理解它，看来为了获得更好性能，IL是我们所需要掌握的东西，《框架程序设计》一书中将IL做为一个大章节来详细的介绍，它就如面向对象的机器语言，通常不同高级语言提供的特性有所不同，CLR使得各种语言可以协作完成同一个开发任务，而IL则能获取CLR的所有功能，有必要的时候完全可以用IL来完成我们需要的代码，Emit便是一种体现。<BR><BR><BR>此文在查阅了数篇相关技术文档和MSDN后而做的简要笔记，重点不在AOP的思想而在实现，。net下的实现思路以及由此引出的动态实现；<BR><BR><BR><BR>2008-5-21 huangxu <img src ="http://www.cnblogs.com/wsky/aggbug/1204379.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41951/" target="_blank">[新闻]2008年8月29日IT博客精选</a>]]></description></item><item><title>初试Microsoft Expression 系列开发工具</title><link>http://www.cnblogs.com/wsky/archive/2008/04/25/1170704.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Fri, 25 Apr 2008 03:08:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/04/25/1170704.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1170704.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/04/25/1170704.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1170704.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1170704.html</trackback:ping><description><![CDATA[装了vs2008专业版，一直没有去试用下，最近在看WCF Pro，对Silverlight也很感兴趣，看了网上一些应用，觉得的确很cool～<BR>于是就打算试试看，在Silverlight官方网上看到推荐一个开发工具，Expression Blend，下了个预览版 用了感觉不错^^,就介绍一下<BR><BR>这个系列都是专业的设计工具,包括图中的几个方面<BR><BR><IMG style="WIDTH: 530px; HEIGHT: 395px" height=494 alt=15.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/15.jpg" width=783 border=0><BR><BR><BR>在Blend版本的参考文档里有一些介绍,它可以用来设计WPF(微软下一代基础界面)和Silverlight应用程序界面,<BR><IMG style="WIDTH: 849px; HEIGHT: 477px" height=696 alt=14.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/14.jpg" width=1277 border=0><BR><BR>下面贴图来展示一下:<BR>打开Blend,可以创建一个sample项目来看看,下图是一个3D的例子<BR><IMG style="WIDTH: 855px; HEIGHT: 450px" height=743 alt=1.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/1.jpg" width=1276 border=0><BR><BR>切换到XAML,下一代基础界面是完全基于xaml标签式定义的<BR><IMG style="WIDTH: 805px; HEIGHT: 465px" height=742 alt=2.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/2.jpg" width=1277 border=0><BR><BR><IMG style="WIDTH: 845px; HEIGHT: 456px" height=740 alt=3.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/3.jpg" width=1273 border=0><BR><BR>我们来建立一个silverlight应用程序,选择Silverlight2版本<BR><IMG style="WIDTH: 960px; HEIGHT: 525px" height=737 alt=5.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/5.jpg" width=1276 border=0><BR><BR><BR>在基础图层上随便画几笔^^再放个文本框,这让我想到了以前做Flash,就是这么个味道,不过它明显由于Flash操作方式,<BR><IMG style="WIDTH: 828px; HEIGHT: 425px" height=736 alt=6.bmp src="http://www.cnblogs.com/images/cnblogs_com/wsky/6.bmp" width=1275 border=0><BR><BR>好,来调试看看,选择Project-&gt;Test Solution,看看发生什么<BR><IMG style="WIDTH: 960px; HEIGHT: 521px" height=741 alt=7.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/7.jpg" width=1277 border=0><BR><BR>调试器配置了一个随机端口,在IE里打开了一个页面,看到了吧,这就是Silverlight~微软的RIA主力~如果你熟悉Flash,那就该对Silverlight有点头绪了,当然它更强大,可以使用CLR托管语言来编写应用,而不是如Flash样使用Action脚本.微软就是喜欢统一统一,用一致的规范来操作所有东西.<IMG height=711 alt=8.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/8.jpg" width=622 border=0><IMG style="WIDTH: 779px; HEIGHT: 429px" height=739 alt=9.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/9.jpg" width=1274 border=0><BR><BR>还可以使用数据源绑定,Object DataSource<BR><IMG style="WIDTH: 867px; HEIGHT: 448px" height=741 alt=10.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/10.jpg" width=1274 border=0><BR><BR><BR>点开它的cs文件,会自动打开vs(我本机是2008),<BR><IMG height=767 alt=12.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/12.jpg" width=1276 border=0><BR><BR>最后再看看用Blend来做WPF设计,也是非常的好用<BR><IMG style="WIDTH: 879px; HEIGHT: 522px" height=764 alt=13.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/13.jpg" width=1277 border=0><BR><BR><BR><BR>最后再说一下RIA(Rich Interface Applications)富界面应用,俗称胖客户端.好处就不用多说了^^<BR><BR><BR><BR><BR><BR><img src ="http://www.cnblogs.com/wsky/aggbug/1170704.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41950/" target="_blank">[新闻]微软在华布局农村手机 定位小城镇和打工者</a>]]></description></item><item><title>Monorail学习笔记</title><link>http://www.cnblogs.com/wsky/archive/2008/04/19/1161738.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Sat, 19 Apr 2008 15:24:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/04/19/1161738.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1161738.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/04/19/1161738.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1161738.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1161738.html</trackback:ping><description><![CDATA[摘要: 最近在看Castle的东西,并在项目里尝试了Castle ActiveRecord来做ORM,<br>通过一些网上的介绍评论和自己的学习,感觉castle是个不错的开源框架,特别是它的IOC容器轻便易用,还有就是MVC框架Monorail~在看了它的一个简易的Demo之后,一下子让我感觉到了这种思想正是我需要的!&nbsp;&nbsp;<a href='http://www.cnblogs.com/wsky/archive/2008/04/19/1161738.html'>阅读全文</a><img src ="http://www.cnblogs.com/wsky/aggbug/1161738.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41949/" target="_blank">[新闻]暴雪确认《星际争霸2》将不会在08年内发售</a>]]></description></item><item><title>体验.net3.x(赶个热潮)</title><link>http://www.cnblogs.com/wsky/archive/2008/04/14/1153507.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Mon, 14 Apr 2008 15:31:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/04/14/1153507.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1153507.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/04/14/1153507.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1153507.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1153507.html</trackback:ping><description><![CDATA[前阵3.5出来后就下了vs08来尝尝鲜，<BR>今天正好收到了《你必须知道的.net》(现在开始要深入理解底层了<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/1.gif"> 时间呦)，就顺便再体味一下dotnet3.0以来的新特性^^<BR>写个Demo分享一下，<BR>自从微软出了3.0和基于它的一系列新技术后，就掀起了新技术学习热潮^^<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/13.gif"> 咱们也不能落后，<BR>多少也要了解了解嘛，<BR><BR>从几个新特性看来，最大的特点就是引入<FONT color=red>基于函数式的编程</FONT>方式，以及语言动态性，现在非常流行的东东，<BR>目前最优秀的动态语言应该是Ruby了，Ruby on rails的敏捷框架更是cool~~<BR><BR>下面介绍一下几个新特性，每个属性只要一句代码你就明白了，非常简单而强大<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/13.gif"> <BR><FONT color=red>对象初始化</FONT>，CarlXu xu = new CarlXu { Name = "Carl Xu" };<BR><BR><FONT color=red>自动属性</FONT>，public string Name { get; set; }<BR><BR><FONT color=red>隐式类型变量</FONT>，var i=100，是不是像javascript的声明，但是它要求必须对声明的变量初始化，<BR>.net会自动根据初始化的值反过来确定类型,所以它依然是强类型的,<BR>是不是觉得它好像用途不大?继续看下一个新特性<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/13.gif"> <BR><BR><FONT color=red>匿名类型</FONT>&nbsp; var temp = new { Name = xu.Name, Birthday = xu.Birthday, ExtendsInfo = ext.Extends };<BR>这是本人最喜欢的特性之一,现在知道var的最大好处了吧,配合匿名类型,动态组装一个匿名类<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/16.gif"> <BR>还是体会不到它的好处吗?想想DataSet吧,有了它还需要大费周章的实现一个强类型的DataSet吗?<BR>List&lt;object&gt; temps=new List&lt;object&gt;(5);<BR>temps.Add(temp);<BR>想想看,在做ORM或者对象绑定的时候是不是很完美的动态解决了数据项和实体的映射?还需要不断的给<BR>实体添加额外的属性吗?<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/13.gif"> 理想状态,(ps:还没有尝试..只是一看到var声明和匿名类就马上想到它的强大作用)<BR><BR><FONT color=red>扩展方法</FONT> 代码附在下面的demo里,比较长<BR>想想js的prototype,是不是觉得很相似, .net吸收了这种思想,使得我们可以在目标类之外来对对象添加扩展方法,<BR>只能是方法哦,而且必须是静态,为什么要这样呢,应该和c#是预编译的有关系(猜测<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/21.gif"> ),不过这已经可以让我们<BR>享受如javascript的自由了<BR><BR>最后一个就是<FONT color=red>查询表达式,</FONT><BR>Linq~~~不用再写难以维护的sql了,Hql也可以抛弃了,因为微软给我们实现了强大的语言级查询功能;<BR>在vs2008中的表达式会有自动语法提示<BR><BR><BR>敲了那么多字该结帖贴代码了^^<BR><BR>using System;<BR>using System.Collections.Generic;<BR>using System.Linq;<BR>using System.Text;<BR>namespace CarlXu.NT3.X.Demo<BR>{<BR>&nbsp; &nbsp; class Program<BR>&nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; static void Main(string[] args)<BR>&nbsp; &nbsp; &nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("It's my demo for .net3.X.");<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("");<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CarlXu xu = new CarlXu { Name = "Carl Xu" };<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExtendInfo ext = new ExtendInfo { Belong = xu.Name, Extends = "my extension" };<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var temp = new { Name = xu.Name, Birthday = xu.Birthday, ExtendsInfo = ext.Extends };<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("step1 Now,Get My Info:" + temp.Name + "," + temp.Birthday.ToString("yyyy-MM-dd") + "," + temp.ExtendsInfo);<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("");<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("step2 Then the extension methods are working");<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xu.ShowInfo();<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string str = "demo";<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; str.TellType();<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("");<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("step3 Last, use Linq:");<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List&lt;CarlXu&gt; list = new List&lt;CarlXu&gt; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new CarlXu{Name = "Carl"},<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new CarlXu{Name = "Xu"},<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new CarlXu{Name = "Xu"},<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new CarlXu{Name = "Xu"},<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new CarlXu{Name = "Carl Xu"}<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IEnumerable&lt;CarlXu&gt; results = from item in list where item.Name == "Xu" select item;<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach (CarlXu x in results)<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("Find:" + x.Name);<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("");<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("step4 over");<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.ReadKey();<BR>&nbsp; &nbsp; &nbsp; &nbsp; }<BR>&nbsp; &nbsp; }<BR><BR>&nbsp; &nbsp; class CarlXu<BR>&nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; public string Name { get; set; }<BR>&nbsp; &nbsp; &nbsp; &nbsp; //readonly propertity<BR>&nbsp; &nbsp; &nbsp; &nbsp; public DateTime Birthday { get { return DateTime.Parse("1987-08-07"); } }<BR>&nbsp; &nbsp; }<BR>&nbsp; &nbsp; /// &lt;summary&gt;<BR>&nbsp; &nbsp; /// Extend Info for CarlXu<BR>&nbsp; &nbsp; /// &lt;/summary&gt;<BR>&nbsp; &nbsp; class ExtendInfo <BR>&nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; public string Belong { get; set; }<BR>&nbsp; &nbsp; &nbsp; &nbsp; public string Extends { get; set; }<BR>&nbsp; &nbsp; }<BR>&nbsp; &nbsp; static class MyExtension<BR>&nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; //Extension Method for CarlXu<BR>&nbsp; &nbsp; &nbsp; &nbsp; public static void ShowInfo(this CarlXu u)<BR>&nbsp; &nbsp; &nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("1:" + u.Name);<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("2:" + u.Birthday);<BR>&nbsp; &nbsp; &nbsp; &nbsp; }<BR>&nbsp; &nbsp; &nbsp; &nbsp; //Extension Method for string<BR>&nbsp; &nbsp; &nbsp; &nbsp; public static void TellType(this string s)<BR>&nbsp; &nbsp; &nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine("Type:" + s.GetType().Name);<BR>&nbsp; &nbsp; &nbsp; &nbsp; }<BR>&nbsp; &nbsp; }<BR>}<BR><BR><BR><FONT color=red>环境是vs2008Express .net3.5</FONT><BR><FONT color=#ff0000></FONT><BR><FONT color=black>过阵抽空多多学习~也赶赶技术热潮<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/16.gif"></FONT><BR><FONT color=black></FONT><BR><FONT color=black>还有我个人很看好的WCF<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/2.gif"> </FONT><BR><FONT color=black></FONT><BR><FONT color=black>额 最后顺便也说下几个新的基础组件</FONT><BR><FONT color=black>WPF</FONT><BR><FONT color=black>WCF windwos通信基础,整合了几乎所有微软的分布式应用</FONT><BR><FONT color=black>WF 就是微软推出的工作流引擎,之前已经有Sharepoint平台的WF开发</FONT><BR><FONT color=black>WCS 不是很清楚它的用意</FONT><BR><FONT color=black></FONT><BR><FONT color=black></FONT><BR><FONT color=black></FONT><BR><FONT color=black></FONT><BR><FONT color=black></FONT><BR><FONT color=#ff0000><FONT color=black>也许你已经了解了3.0的新技术,甚至已经在实际项目应用它们了,本文只是做一个新特性的纵览<IMG src="http://bbs.jmu.edu.cn/editor/images/smilies/default/14.gif"></FONT> </FONT><img src ="http://www.cnblogs.com/wsky/aggbug/1153507.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41948/" target="_blank">[新闻]福布斯:IE8很多功能针对谷歌 微软要玩偷袭</a>]]></description></item><item><title>Castle实践笔记以及关于使用ActiveRecord时的集合类映射问题</title><link>http://www.cnblogs.com/wsky/archive/2008/04/14/1151876.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Sun, 13 Apr 2008 17:17:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/04/14/1151876.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1151876.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/04/14/1151876.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1151876.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1151876.html</trackback:ping><description><![CDATA[摘要: Castle实践笔记以及关于使用ActiveRecord时的集合类映射问题 2008-4-14 huangxu近期在项目中使用Castle ActiveRecord(以下简称AR)以及它的IOC容器,对于AR,总的来说使用起来的感觉还是蛮易用的,因为没有系统学习过Nhibernare,所以对它的底层没有太多体会,使用的时候还是得比较谨慎的;在开发过程中,最头痛的就是使用AR来实现复杂的数据提取的时&nbsp;&nbsp;<a href='http://www.cnblogs.com/wsky/archive/2008/04/14/1151876.html'>阅读全文</a><img src ="http://www.cnblogs.com/wsky/aggbug/1151876.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41948/" target="_blank">[新闻]福布斯:IE8很多功能针对谷歌 微软要玩偷袭</a>]]></description></item><item><title>MVC&amp;MonoRail 从webform到模板引擎</title><link>http://www.cnblogs.com/wsky/archive/2008/04/12/1149838.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Fri, 11 Apr 2008 19:00:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/04/12/1149838.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1149838.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/04/12/1149838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1149838.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1149838.html</trackback:ping><description><![CDATA[首先,引用一段话,园子里的某人如是说:<BR>"<FONT color=purple>不要把asp.net和webform混淆，邪恶的是webform。拖一个textbox和写&lt;input type=“textbox”/&gt;比起来能省多少事？如果要做个有个性化样式或结构的表格，用控件能比foreach容易？从datagrid的编辑模式更新一列数据要多少步骤？获得行索引，获得行，从中再获得控件，再赋值。如果用mvc的话，input的值直接就能从action的参数获得了。在熟悉html的前提下，webform毫无优势</FONT>"<BR><BR>接着,给你介绍一下Rails<BR>继续引用:<BR><FONT color=purple>Rails框架首次提出是在2004年7月，它的研发者是26岁的丹麦人David Heinemeier Hansson。不同于已有复杂的Web 开发框架，Rails是一个更符合实际需要而且更高效的Web开发框架。Rails结合了PHP体系的优点（快速开发）和Java体系的优点（程序规整），因此，Rails在其提出后不长的时间里就受到了业内广泛的关注。<BR>Rails框架主要有如下的6大特点。<BR>1．全栈式的MVC框架 <BR>2．约定优于配置<BR>3．更少的代码 <BR>4．生成器 <BR>5．零周转时间<BR>6．支架系统<BR>Rails的支架系统可以自动为任何相关的数据库表创建一套包含标准CRUD操作和前台视图的系统。通过支架系统，开发人员可以方便快捷地操纵数据库中的数据表。此外，Rails也允许开发人员使用自己设计的代码或视图来替换自动生成的代码和视图。<BR></FONT><BR>关于Rails可以参考这里：<A href="/wsky/articles/1149317.html" target=_blank>http://www.cnblogs.com/wsky/articles/1149317.html</A><BR><BR><BR><BR>然后回到本文的主题上,开源是自由的,rails的自由度和开发效率现在已经毋庸置疑了,<BR>&nbsp; &nbsp; &nbsp; "拖一个textbox和写&lt;input type=“textbox”/&gt;比起来能省多少事？",你觉得呢?的确,五花八门的Server Control是似乎是asp.net最吸引人, 最有优势的地方. Webform确实是一个非常棒的设计. 复杂的HTML和js在服务端被包装成简单易用, 有清晰层次结构的对象, 比起asp时代界面的编写方便多了.<BR>然而大部分流行的asp.net控件, 都有开源的js实现的替代品, 例如HTML编辑器可以用FCKeditor, 日历可以用JsCalendar, 还有TreeView, Menu之类的, 在sf.net都应该找得到比较好的项目. 其实webform只是入门容易，要精通的话它的成本是比精通xhtml + css + javascript的成本高得多的。<BR><BR>再来看看微软新推出的MVC,<BR>ASP.NET MVC还会使用aspx，但是它没有viewstate，没有postback，所以它在这里只是个模板引擎;<BR>现在要进入关键的地方了,<BR>何谓模板引擎?<BR>还是要再提到前面介绍的Rails,先说Ruby on Rails,对于完全动态的语言,你是否了解呢?(额~我也不大了解,所以这里就不说他...),<BR>再看看Monorail(原名Castle On Rails,是CastleProject的一个子项目),<BR>到处都是On Rails,快捷开发~!<BR>下面开始介绍Monorail,我感兴趣的东西^^<BR>以下是引用^^<BR><BR><FONT color=purple>MonoRail的核心是</FONT><A href="http://ap.rubyonrails.org/" target=_blank><FONT color=purple>Action Pack</FONT></A><FONT color=purple>在.NET上的实现. 这种方式高效, 直观而且易于测试.</FONT><BR><FONT color=purple>MonoRail的开发模式和传统的webform有很大区别, webform属于</FONT><A href="http://www.microsoft.com/china/MSDN/library/architecture/patterns/esp/DesPageController.mspx" target=_blank><FONT color=purple>PageController</FONT></A><FONT color=purple>模式, 每一个页面对应一个Controller, 通常情况下, 这个Controller就是根据url相对应的.aspx文件分析出来产生的类. 如果不清楚aspx的底细, 请看</FONT><A href="http://blog.joycode.com/microhelper/articles/9811.aspx" target=_blank><FONT color=purple>这里</FONT></A><FONT color=purple>. System.WebUI.Page实现了IHttpHandler, 每个aspx相关的类各自处理自己的http请求, 经一些逻辑处理后(通常代码在aspx的Codebind类, 也就是aspx的父类), 输出自己的视图. 而MonoRail是</FONT><A href="http://www.microsoft.com/china/MSDN/library/architecture/patterns/esp/DesFrontController.mspx" target=_blank><FONT color=purple>FrontController</FONT></A><FONT color=purple>模式, 由Castle.MonoRail.Framework.MonoRailHttpHandler接管所有请求, 然后根据请求的url创建相应的controller, controller再调用相应的action, 最后调用模板引擎输出内容. 默认情况下, 一个url的结构是Controller/action. 例如, http://localhost/monorailSample/Home/index.rails对应类HomeController的Index()方法.</FONT><BR><FONT color=purple><IMG height=584 src="http://yok.cnblogs.com/images/cnblogs_com/yok/mr_flow.png" width=523 onload="attachimg(this, 'load');" border=0 &nbsp;></FONT><BR><FONT color=purple>MonoRail实现的模板引擎有3个</FONT><BR><FONT color=purple>AspNetViewEngine<BR>用传统的.aspx文件做模板, 可以照常使用aspx语法和服务器控件, 但是由于Webform的生命周期和MonoRail完全不同, 有时候会让人觉得别扭, 有部分特性也受到了限制.</FONT><BR><FONT color=purple>NVelocityViewEngine<BR>用NVelocity做模板引擎, 需要学习</FONT><A href="http://jakarta.apache.org/velocity/docs/vtl-reference-guide.html" target=_blank><FONT color=purple>VTL</FONT></A><FONT color=purple>语法, 但是使用很简单, 特别是很多java程序员已经熟悉velocity. 简单的语法也强迫程序员把逻辑和界面很好的分离开来, 方便跟美工配合.</FONT><BR><FONT color=purple>BrailViewEngine<BR>基于</FONT><A href="http://boo.codehaus.org/" target=_blank><FONT color=purple>Boo</FONT></A><FONT color=purple>的模板引擎, Boo是一种语法类似python的.NET语言, 据MonoRail的参考说, Brail引擎是功能最强, 性能最好的选择, 但Boo是一种陌生的语言, 这成了Brail引擎应用的最大障碍.</FONT><BR><FONT color=purple>综合各种因素, MonoRail推荐使用的模板引擎是NVelocity</FONT><BR><BR>这是官方网的链接,想深入了解的可以看看^^欢迎交流<BR><A href="http://www.castleproject.org/monorail/index.html" target=_blank>http://www.castleproject.org/monorail/index.html</A><BR><BR><BR><BR>看了上面那么多没有头绪的东西,问你一个问题,asp.net可以实现MVC吗?CodeBehind是不是MVC的表现形式呢?<BR>^-^犹豫了?我敲段代码给你瞧瞧<BR>string output=GetStringFromStream(Server.Excute("XX.aspx")).Replace("$name","Carl Xu");<BR>Respone.Write(output);<BR><BR>//xx.asp<BR>&lt;div&gt;$name&lt;/div&gt;<BR>.....<BR><BR>看出这是在做什么了么,是不是很熟悉呢?写过N遍了?是的,我在替换模板,在实现一个超简单的模板引擎(姑且这么说),<BR>那么,我为什么不用webform控件绑定呢?我的回答是:"用绑定?用控件?还是用&lt;%#%&gt;?,我要有N个类似的页面呢?我还是要反复的这样绑定?我的美工怎么办??他要什么时候才能参与到项目里来?他的页面到底怎么编写?",<BR>这个问题出现的原因是什么呢?<BR>答案是,我们需要MVC,我们需要真正的分离.显然asp.net webform的模板方式不能满足这种分离,CodeBehinde不过是控制的转移,从asp到asp.net的一个飞跃而已...<BR><BR><BR>我们来看看Monorail是怎么做的,<BR><FONT color=deepskyblue>/////////////////////<BR>//~/Controllers/xx.cs<BR>using System;<BR>using Castle.MonoRail.Framework;<BR><BR>namespace MonoRailTest.Controllers<BR>{<BR>&nbsp; &nbsp; public class HomeController :Controller<BR>&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; public void Index()<BR>&nbsp; &nbsp; &nbsp; &nbsp; {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PropertyBag.Add("name", "John Doe");<BR>&nbsp; &nbsp; &nbsp; &nbsp; }<BR>&nbsp; &nbsp; }<BR>}<BR>//////////////////////<BR>//~/views/xx.vm<BR>&lt;html&gt;<BR>&nbsp; &lt;body&gt;<BR>&nbsp; &nbsp; Hi there, my name is $name！&nbsp; &lt;/body&gt;<BR>&lt;/html&gt;<BR></FONT><BR>看到了吗?你说说看,View和Controller分离了没?<BR><BR>还有视图状态和回发吗?传统的aspx生命周期不见了...<BR><BR>这里要说明一点,使用Monorail意味着不能使用传统的asp.net,aspx页面对你来说毫无意义;<BR>我们的页面是xxx.rails,Monorail框架代替了asp.net的模板引擎,当然,在服务器级别还是需要经过asp.net ISAPI筛选,<BR>然后才将控制权交给Mono,<BR><BR><BR><BR>说了这么多 就是因为突然觉得MVC能那么的临近(离自己思想近,^^),有感而发~~<BR>现在还有MVP(基于控件)也是一个趋势,总之,web开发,开发效率和性能是最终话题,框架和模式是<BR>为达到这些目的而生,一个框架并不难掌握,思想才是关键,也许你在深入了解一些框架之后会发现,原来自己也曾在实践<BR>编写一个自己常用的小框架(仅仅是很小的一点应用),<BR><BR><BR>话题就到这,微软的技术更新太快了,对于像我这样刚学习不久的人员来说,实在是汗,大汗,呵呵 加油吧,<BR>别被微软惯坏了^^ <BR><BR><BR><BR>整理一些Monorail的链接<BR><A href="http://www.castleproject.org/monorail/index.html">http://www.castleproject.org/monorail/index.html</A><BR><A href="/Yok/category/106196.html">http://www.cnblogs.com/Yok/category/106196.html</A><BR><A href="http://goodlyts.cnblogs.com/archive/2005/10/19/257542.html">http://goodlyts.cnblogs.com/archive/2005/10/19/257542.html</A><BR><A href="/bluewater/archive/2006/12/11/589214.html">http://www.cnblogs.com/bluewater/archive/2006/12/11/589214.html</A><BR><A href="http://terrylee.cnblogs.com/archive/2006/05/07/393481.html">http://terrylee.cnblogs.com/archive/2006/05/07/393481.html</A><BR><BR>感谢乐于分享的人们^_^<img src ="http://www.cnblogs.com/wsky/aggbug/1149838.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41947/" target="_blank">[新闻]施密特：谷歌计划十月份开始推进与雅虎合作</a>]]></description></item><item><title>[转]什么是Rails?</title><link>http://www.cnblogs.com/wsky/articles/1149317.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Fri, 11 Apr 2008 16:17:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/articles/1149317.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1149317.html</wfw:comment><comments>http://www.cnblogs.com/wsky/articles/1149317.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1149317.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1149317.html</trackback:ping><description><![CDATA[<P>Rails框架首次提出是在2004年7月，它的研发者是26岁的丹麦人David Heinemeier Hansson。不同于已有复杂的Web 开发框架，Rails是一个更符合实际需要而且更高效的Web开发框架。Rails结合了PHP体系的优点（快速开发）和Java体系的优点（程序规整），因此，Rails在其提出后不长的时间里就受到了业内广泛的关注。</P>
<P>Rails框架主要有如下的6大特点。</P>1．全栈式的MVC框架 
<P>Rails是一个全栈式的MVC框架，换句话说，通过Rails可以实现MVC模式中的各个层次，并使它们无缝地协同运转起来。</P>
<P>在实际开发一个MVC模式的Web应用项目时，如果使用Java开发，需要用到Struts（Model层）、Hibernate（Controller层）和Spring（View层）3个框架，而且需要额外整合3个框架开发出的内容。而使用Ruby语言开发相同的项目时，只需要用到Rails框架就可以完成。</P>2．约定优于配置 
<P>为了说明各个对象之间的关联关系，一般的Web应用开发框架往往采用写入XML配置文件的方法。这种方式虽然可以解决一些问题，但是却带来了<SPAN class=m><A href="http://www.5igongwen.com/5isearch-55.html">管理</A></SPAN>上的混乱。</P>
<P>Rails对此的态度是约定优于配置，这意味着在Rails中不会出现XML配置文件。Rails使用Web应用多年来积累的各种常见约定（更具体地说是命名规则）来代替XML配置文件，而在Rails内部的映射与发现机制根据这些约定可以实现对象之间的关联。在第1章中，通过Rails的映射与发现机制实现了数据表与Ruby对象之间的关联。</P>3．更少的代码 
<P>使用约定来代替XML配置文件说明Rails本身完成了大量的底层工作，这意味着使用更少的代码来实现应用程序是极有可能的。此外，代码量的缩减也减小了出现bug的可能性，降低了维护程序和升级程序的难度。</P>4．生成器 
<P>Rails使用的实时映射技术和元编程技术，免去了开发人员在开发过程中编写大量样板文件代码的烦恼。在少数需要使用样板文件代码的时候，开发人员可以通过Rails内建的生成器脚本实时创建，而不再是通过手工编写。Rails的这个特点可以使开发人员更专注于系统的逻辑结构，而不必为一些琐碎的细节所烦扰。</P>5．零周转时间 
<P>对已有的Web应用系统进行修改后，其一般需要经过配置、编译、发布、重新设置、测试等一系列步骤才能投入使用，这明显浪费了许多时间。而使用Rails开发Web应用系统，可以通过浏览器即时查看程序运行结果，从而节约了大量的时间。</P>6．支架系统 
<P>Rails的支架系统可以自动为任何相关的数据库表创建一套包含标准CRUD操作和前台视图的系统。通过支架系统，开发人员可以方便快捷地操纵数据库中的数据表。此外，Rails也允许开发人员使用自己设计的代码或视图来替换自动生成的代码和视图。</P><img src ="http://www.cnblogs.com/wsky/aggbug/1149317.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41947/" target="_blank">[新闻]施密特：谷歌计划十月份开始推进与雅虎合作</a>]]></description></item><item><title>Castle的Nullables和。net空值处理</title><link>http://www.cnblogs.com/wsky/archive/2008/04/11/1149243.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Fri, 11 Apr 2008 15:12:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/04/11/1149243.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1149243.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/04/11/1149243.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1149243.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1149243.html</trackback:ping><description><![CDATA[晚上在一个开源群里，一个朋友提出了个关于使用castle时候空值处理的问题<BR><BR>要在字段里插入空值<BR><BR>castle有提供一组空值类型，可以如下实现:<BR><SPAN style="COLOR: #000000">[Property]<BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;NullableDateTime&nbsp;CreatedDate<BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_49_121_Open_Image onclick="this.style.display='none'; Codehighlighter1_49_121_Open_Text.style.display='none'; Codehighlighter1_49_121_Closed_Image.style.display='inline'; Codehighlighter1_49_121_Closed_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_49_121_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_49_121_Closed_Text.style.display='none'; Codehighlighter1_49_121_Open_Image.style.display='inline'; Codehighlighter1_49_121_Open_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_49_121_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://terrylee.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_49_121_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_60_83_Open_Image onclick="this.style.display='none'; Codehighlighter1_60_83_Open_Text.style.display='none'; Codehighlighter1_60_83_Closed_Image.style.display='inline'; Codehighlighter1_60_83_Closed_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_60_83_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_83_Closed_Text.style.display='none'; Codehighlighter1_60_83_Open_Image.style.display='inline'; Codehighlighter1_60_83_Open_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">get</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_60_83_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://terrylee.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_60_83_Open_Text><SPAN style="COLOR: #000000">{&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;_createdDate;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_94_118_Open_Image onclick="this.style.display='none'; Codehighlighter1_94_118_Open_Text.style.display='none'; Codehighlighter1_94_118_Closed_Image.style.display='inline'; Codehighlighter1_94_118_Closed_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_94_118_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_94_118_Closed_Text.style.display='none'; Codehighlighter1_94_118_Open_Image.style.display='inline'; Codehighlighter1_94_118_Open_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">set</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_94_118_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://terrylee.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_94_118_Open_Text><SPAN style="COLOR: #000000">{&nbsp;_createdDate&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;value;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;<BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>[Property]<BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;NullableInt32&nbsp;Count<BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_167_227_Open_Image onclick="this.style.display='none'; Codehighlighter1_167_227_Open_Text.style.display='none'; Codehighlighter1_167_227_Closed_Image.style.display='inline'; Codehighlighter1_167_227_Closed_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_167_227_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_167_227_Closed_Text.style.display='none'; Codehighlighter1_167_227_Open_Image.style.display='inline'; Codehighlighter1_167_227_Open_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_167_227_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://terrylee.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_167_227_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_178_195_Open_Image onclick="this.style.display='none'; Codehighlighter1_178_195_Open_Text.style.display='none'; Codehighlighter1_178_195_Closed_Image.style.display='inline'; Codehighlighter1_178_195_Closed_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_178_195_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_178_195_Closed_Text.style.display='none'; Codehighlighter1_178_195_Open_Image.style.display='inline'; Codehighlighter1_178_195_Open_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">get</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_178_195_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://terrylee.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_178_195_Open_Text><SPAN style="COLOR: #000000">{&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;_count;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_206_224_Open_Image onclick="this.style.display='none'; Codehighlighter1_206_224_Open_Text.style.display='none'; Codehighlighter1_206_224_Closed_Image.style.display='inline'; Codehighlighter1_206_224_Closed_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_206_224_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_206_224_Closed_Text.style.display='none'; Codehighlighter1_206_224_Open_Image.style.display='inline'; Codehighlighter1_206_224_Open_Text.style.display='inline';" src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">set</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_206_224_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://terrylee.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_206_224_Open_Text><SPAN style="COLOR: #000000">{&nbsp;_count&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;value;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}<BR><BR><SPAN lang=EN-US style="FONT-SIZE: 10pt; LINE-HEIGHT: 150%">ActiveRecord</SPAN><SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的空属类型与实际类型对照表</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; LINE-HEIGHT: 150%"><?XML:NAMESPACE PREFIX = O /><O:P></O:P></SPAN>
<DIV align=center>
<TABLE class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><B><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">CLR Basic Type <O:P></O:P></SPAN></B></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><B><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullable Type <O:P></O:P></SPAN></B></P></TD></TR>
<TR style="mso-yfti-irow: 1">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Boolean <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableBoolean <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 2">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Byte <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableByte <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 3">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Char <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableChar <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 4">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.DateTime <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableDateTime <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 5">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Decimal <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableDecimal <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 6">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Double <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableDouble <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 7">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Guid <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableGuid <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 8">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Int16 <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableInt16 <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 9">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Int32 <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableInt32 <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 10">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Int64 <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableInt64 <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 11">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.SByte <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableSByte <O:P></O:P></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 12; mso-yfti-lastrow: yes">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-pagination: widow-orphan" align=center><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">System.Single <O:P></O:P></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width=284>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #333333; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Nullables.NullableSingle <O:P></O:P></SPAN></P></TD></TR></TBODY></TABLE></DIV>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意在使用空属类型时需要添加以下引用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; LINE-HEIGHT: 150%"><O:P></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">Nullables.dll<BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>Nullables.NHibernate.dll</SPAN></DIV><BR>【上面引用了TerryLee老师的一些博客资料】<BR><BR><BR><BR>但是在使用的时候出现一些转换上的问题，看起来不兼容的样子，具体代码情况那位朋友没有说清楚，<BR>只是需要在一个字段插入Null值<BR><BR>于是我提出说可以直接设置NotNull=false 就可以忽略初始化时候赋值，<BR>但是这样做的结果是 int字段的值自动填为0，也就是说这样设置依然有在持久化的时候使用该属性，并设置了默认的值<BR><BR>那么Nullable类型的属性看来是很有必要的了，<BR><BR>回头想想，.net很强大，对这种情况会没有考虑到吗？<BR>不知你是否注意到int？ i；这样的声明。<BR><BR>嗯，这就是解决问题的方法～<BR><BR>private int? _count;<BR>[Property]<BR>public int? Count<BR>{<BR>get { return _count; }<BR>set { _count = value; }<BR>}<BR><BR><BR>问题就这样解决～<BR><BR>。net2.0开始，支持空值，这样就不会再自动默认为0了～呵呵 不知道在看书的时候是否忘记还有这么个好用的特性呢～^^<BR></SPAN></O:P></SPAN></SPAN><img src ="http://www.cnblogs.com/wsky/aggbug/1149243.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41946/" target="_blank">[新闻]微软加快XP专业版反盗版步伐</a>]]></description></item><item><title>Discuz开源代码结构小分析^^</title><link>http://www.cnblogs.com/wsky/archive/2008/04/11/1149098.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Fri, 11 Apr 2008 13:13:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/04/11/1149098.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1149098.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/04/11/1149098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1149098.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1149098.html</trackback:ping><description><![CDATA[<P class="g_w_100 g_t_wrap g_t_center g_t_bold g_t_24 g_c_pdin c07" id=blogtitle_fks!084064081084080071080081082095083085081066085084081065>Discuz开源代码结构分析 2008-4-11 Carl Xu</P>
<DIV class=g_blog_list>
<DIV class="g_t_center g_c_pdin g_p_center c07 content" id=blogtext_fks!084064081084080071080081082095083085081066085084081065 style="WIDTH: 760px">
<P>Discuz开源代码结构分析<BR>2008-4-11<BR>Carl Xu <BR>/*<BR>分析DZNT的开源代码大体层次结构<BR>*/<BR>右图是DiscuzNt(以下简称DZ)开源代码的方案结构 <IMG height=327 alt=未命名.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/dz/未命名.jpg" width=214 border=0><BR>20个项目,看上去好像很庞大,现在我们来分析一下它的层次,从本人的个人分析角度上看discus是比较典型的应用三层架构,可以说在架构上是比较普通的,<BR><IMG height=112 alt=2.jpg src="http://www.cnblogs.com/images/cnblogs_com/wsky/dz/2.jpg" width=250 border=0>左图是DZ的几个数据层项目,Data项目提供公用访问接口, Data.Access 和Data.MySql以及Data.SqlServer是公用接口的三种数据访问层的实现,<BR>IDataProvidor接口所提供的接口数量惊人…..代码行将近5000,DZ的业务逻辑的确非常庞大,其实这样的接口编写方式,个人是比较抵制的,这样看起来,这种实现纯粹是为了接口而写接口,在实现了普通访问层代码后,在反过来把所有实现的方法做为基类的接口成员,这个方式在实际中是没有问题的,很多时候我们是倾向于这么做,只是这样的5000行的接口代码就实在不敢恭维…依此可见,DZ的多数据库支持是建立在这样一个为每种数据库重建访问层实现的方式上的,可幸的是这没有影响它的运行性能,^^<BR>继续分析,Discuz.Data.DatabaseProvider 提供数据层工厂方法以实现多数据库支持; ,<BR><BR>那么以上就是数据访问层的分析,很普通的做法,DZ在重构的时候看来只是简单的实现接口编程,没有对业务结构做出新的重构;<BR><BR><BR>再来看业务层和web层,因为如前面分析所说,已经实现了普通而良好的数据工厂和数据访问层接口,所以上层就是完全面向接口的了,在这几个层次里也看不到任何的数据库访问,sql语句等,<BR><IMG height=212 alt=3.bmp src="http://www.cnblogs.com/images/cnblogs_com/wsky/dz/3.bmp" width=209 border=0>这个就是web层,它把后台页面代码分离成为独立的dll,这样做是处于版权的考虑,让你不能获得源代码,获得了也不能轻易的修改,^^这个做法也使得以下的web目录非常的轻便,只有几个文件和目录,通常编写庞大的web应用页面必然会很多,没有全盘考虑,一下就会建好多的页面出来,而很多情况,页面中的部分甚至整个页面是功能类似的,因此应该考虑以组件,控件等方式进行复用,DZ就是个例子.<IMG height=335 alt=4.bmp src="http://www.cnblogs.com/images/cnblogs_com/wsky/dz/4.bmp" width=211 border=0><BR><BR><BR><BR>下面这几个是作为DZ的插件功能,用来在后续开发中扩充应用,以类似方式定义程序集名称,按照一定的规范来编写DZ平台的插件,这是现在普遍采用的方式,</P>
<P><IMG height=76 alt=5.bmp src="http://www.cnblogs.com/images/cnblogs_com/wsky/dz/5.bmp" width=205 border=0><BR>一些网站或者开源控件会提供这样的规范,让开发人员添加一些基于该平台等的应用,DZ的具体插件应用我就不清楚了 不想接着看^^主要是分析大体结构</P>
<P><IMG height=75 alt=6.bmp src="http://www.cnblogs.com/images/cnblogs_com/wsky/dz/6.bmp" width=171 border=0><BR>这些则是一些通用的方法程序集,没有什么好讨论的,里面封装的一些类可以拿出来单独使用,还是挺方便的,Discuz.Cache实现DZ的缓存机制,<BR><BR>以上就是DZ主论坛的源码分析<BR></P></DIV></DIV><img src ="http://www.cnblogs.com/wsky/aggbug/1149098.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41946/" target="_blank">[新闻]微软加快XP专业版反盗版步伐</a>]]></description></item><item><title>有效利用数据源绑定</title><link>http://www.cnblogs.com/wsky/archive/2008/03/30/1129640.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Sun, 30 Mar 2008 03:25:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/03/30/1129640.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1129640.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/03/30/1129640.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1129640.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1129640.html</trackback:ping><description><![CDATA[通常js需要从服务器获取一些数据来实现应用,<br />
有两种思路:1.使用ajax异步加载&nbsp; 2.利用服务器加载页面的时候同时加载数据<br />
<br />
这里要提的是第二种方式,很普遍的,但是性能却很值得考究.如何来加载这些数据的绑定.<br />
<br />
场景如下:<br />
需要生成一列表,根据点击不同的列表项显示不同图片;<br />
很显然,这里的列表项是包含图片的信息的,这样的话我们就应该利用这点来有效使用数据源的绑定<br />
<br />
&nbsp;  Dictionary&lt;int, string&gt; ImgsList = new Dictionary&lt;int, string&gt;();<br />
<br />
&nbsp; &nbsp; public string Imgs;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; public int Index;<br />
<br />
&nbsp; &nbsp; protected override void OnInit(EventArgs e)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; //this.repItems.ItemCreated += new RepeaterItemEventHandler(repItems_ItemCreated);<br />
&nbsp; &nbsp; &nbsp; &nbsp; this.repItems.PreRender += new EventHandler(repItems_PreRender);<br />
&nbsp; &nbsp; &nbsp; &nbsp; this.repItems.ItemDataBound += new RepeaterItemEventHandler(repItems_ItemDataBound);<br />
&nbsp; &nbsp; &nbsp; &nbsp; base.OnInit(e); <br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; void repItems_ItemDataBound(object sender, RepeaterItemEventArgs e)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; Index = e.Item.ItemIndex;<br />
&nbsp;
&nbsp; &nbsp; &nbsp; ImgsList.Add((int)DataBinder.GetPropertyValue(e.Item.DataItem,
("ROOMTYPEID")),
Convert.ToString(DataBinder.GetPropertyValue(e.Item.DataItem,
("Picture"))));<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; //void repItems_ItemCreated(object sender, RepeaterItemEventArgs e)<br />
&nbsp; &nbsp; //{<br />
&nbsp; &nbsp; &nbsp; &nbsp; //if (!IsPostBack)<br />
&nbsp; &nbsp; &nbsp; &nbsp; //{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Index = e.Item.ItemIndex;<br />
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
//ImgsList.Add((int)DataBinder.GetPropertyValue(e.Item.DataItem,
("ROOMTYPEID")),
Convert.ToString(DataBinder.GetPropertyValue(e.Item.DataItem,
("Picture"))));<br />
&nbsp; &nbsp; &nbsp; &nbsp; //}<br />
&nbsp; &nbsp; //}<br />
<br />
&nbsp; &nbsp; void repItems_PreRender(object sender, EventArgs e)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; Imgs = "";<br />
&nbsp; &nbsp; &nbsp; &nbsp; foreach (string s in ImgsList.Values)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Imgs += "'" + GetPath(s) + "',";<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; Imgs = Imgs.TrimEnd(',');<br />
&nbsp; &nbsp; }<br />
//////////////////////////////////<br />
//页面绑定处理<br />
/////////////////////////////////<br />
&lt;asp:Repeater ID="repItems" runat="server" DataSourceID="rooms"&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;ItemTemplate&gt;<br />
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li ROOMTYPEID")
%&gt;','&lt;%#Eval("ROOMTYPENAME") %&gt;','&lt;%#Eval("MEMBERPRICE")
%&gt;',&lt;%#Index %&gt;)"&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div class="_title"&gt;&lt;%#Eval("ROOMTYPENAME") %&gt;&lt;/div&gt;<br />
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div
class="_price"&gt;￥&lt;%#Eval("MEMBERPRICE","{0:F2}")%&gt;-￥&lt;%#Eval
("PRICE","{0:F2}")%&gt;&lt;/div&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/li&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/ItemTemplate&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/asp:Repeater&gt;<br />
&lt;script type="text/javascript"&gt;<br />
&nbsp; &nbsp; &nbsp;  var imgs=new Array(&lt;%=Imgs %&gt;);//利用绑定生成的图片信息数组<br />
&nbsp; &nbsp; &nbsp; &nbsp; function setImg(index){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('div#itemPic').html('&lt;img src='+imgs[index]+'&gt;');<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&lt;/script&gt;<br />
<br />
<br />
<br />
<br />
<br />
<br />
这里利用了数据控件的事件句柄来实现加载资源的利用,而不必对图片数组使用另外的加载方式来重新访问一次数据,<br />
在基于数据web应用里,很多时候性能就是出现在数据库的访问上,既然我们已经能在一次访问边可以得到所有有效数据,<br />
就没有必要另外的去写单独的绑定,ajax方式也可以加快加载,但是还是浪费了一次绑定,造成加载后过多的对数据的原子操作<br />
<br />
PS:注意一点,对于事件的生命周期,要多考究一下,上述代码里注释了一段void repItems_ItemCreated<br />
回发的时候可以看到,图片不会再显示了,这恐怕是这个方式的缺陷,因为这种变量式的绑定是无法利用视图状态来在回发期间保持数据的,<br />
当然,可以考虑使用天然的html input控件来存放数组信息,<br />
同时如果是使用void repItems_ItemCreated而不是用repItems_ItemDataBound委托的话,<br />
在回发的时候将会出现将空引用,ItemCreated事件在回发期间会被调用重建数据控件绑定项目,<br />
而ItemDataBound只会在页面第一次加载的时候被调用来进行绑定,也就是说回发的时候不会进行绑定,只是利用视图状态重建列表项目,<br />
所以e.Item.DataItem数据绑定项目的引用将会为空引用.<br />
<br />
repItems_PreRender则用来在呈现列表项之前输出我们所要得到的图片数组信息(如果数组的绑定不放在这里,<br />
可能会出现ImgsList为空的情况,因为ImgsList 是在数据绑定之后才被赋值完成的,所有数组的绑定就直接放在这个事件中比较安全);<br />
<br />
<br />
利用事件编程可以处理很多事情,减少很多代码量,多多理解页面的编程模型咯~<br />
<br />
<br />
<br />
尝试自己理解写一些文章,多多指正^^<br />
<img src ="http://www.cnblogs.com/wsky/aggbug/1129640.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41945/" target="_blank">[新闻]Mozilla与谷歌续签三年搜索合同</a>]]></description></item><item><title>IOC vs Factory</title><link>http://www.cnblogs.com/wsky/archive/2008/03/29/1128412.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Fri, 28 Mar 2008 19:59:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/03/29/1128412.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1128412.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/03/29/1128412.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1128412.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1128412.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/wsky/factory.jpg" height="331" width="668" /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/wsky/IOCvsFactory.jpg" height="442" width="828" /><br />
<br />
<br />
才开始研究IOC,这阵在项目里实践Castle的ORM,然后重构了一次,加深了对设计的体会,<br />
发现工厂方式和IOC模式好像很类似,所以上网查阅了一些资料,确实如此,就画个图自行分析一些,给自己做做记录~<img src="http://www.cnblogs.com/Emoticons/qface/055242240.gif" alt="" /><br />
<br />
图临时用word画的...下次得用visio~<br />
<br />
<img src ="http://www.cnblogs.com/wsky/aggbug/1128412.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41944/" target="_blank">[新闻]CBS推出新版CNET重推视频</a>]]></description></item><item><title>使用泛型时，避免基类及接口约束</title><link>http://www.cnblogs.com/wsky/articles/1122166.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Tue, 25 Mar 2008 14:51:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/articles/1122166.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1122166.html</wfw:comment><comments>http://www.cnblogs.com/wsky/articles/1122166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1122166.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1122166.html</trackback:ping><description><![CDATA[使用泛型的时候我们可以这样来约束一个参数<br />
void Sort&lt;T&gt;(T[] arr) where T : IComparable&lt;T&gt;<br />
这里实现一个泛型的排序方法，约束参数T必须是实现 IComparable&lt;T&gt;接口，那么当我们使用这个方法的时候，<br />
我们不得不提供满足约束的参数，否则在强制转换的时候就会报错，那么当我们或者使用者原有的对象类<br />
型并非实现IComparable&lt;T&gt;的时候呢？为了排序，我们不得不修改原来的对象，让它实现约束的接口，<br />
一般看来，这个方法做了很好的规范，<img src="http://bbs.jmu.edu.cn/editor/images/smilies/default/13.gif"  alt="" /> <br />
然而实际应用中，这个方法是很不合适的，首先为什么非要实现了<br />
IComparable&lt;T&gt;接口的对象才能进行排序?实现了IComparable的就不行吗？没有实现二者中任何一个的接口对象<br />
就不行排序吗？这个约束几乎把所有普通类型的对象拒之门外～<img src="http://bbs.jmu.edu.cn/editor/images/smilies/default/1.gif"  alt="" /> 然而我们仅仅需要的只是一个比较方法～<br />
<br />
再看看这个方法：<br />
void Sort&lt;T&gt;(T[] arr, IComparer&lt;T&gt; comparer)<br />
现在我们对T现在没有任何限制，但是要求提供一个IComparer(Of T)的实例。这个IComparer(Of T)的实现和T可<br />
以没有关系，因此不仅T可以不知晓它的存在，还可以提供不只一种的比较方法。<br />
<br />
再改进一下：<br />
void Sort&lt;T&gt;(T[] arr){Sort(arr, Comparable&lt;T&gt;.Default);}<br />
代码中的Comparer(Of T)是System.Collection.Generic下的一个类型，专门用于提供类型默认的比较器。<br />
我们现在没有约束了，但是对用户来说，和有约束时的语法一样简单而清晰。比较那些实现了IComparable<br />
和IComparable(Of T)的类型时，Comparer(Of T)都提供了支持，而在比较没有实现这类接口的自定义类型时，<br />
可自行实现IComparer(Of T)提供比较机制。完美解决。<img src="http://bbs.jmu.edu.cn/editor/images/smilies/default/16.gif"  alt="" /> <br />
<br />
这种方法还能进行一些约束都实现不了的做法：支持运算符。我们知道在类型参数上实现哪怕最简单的加法都是不允许的，<br />
而且没有任何接口可以帮你做到这一点。这时如果能够使用<font color="red">外部辅助类的做法</font>，就能够突破这一恼人的限制。<br />
<br />
<br />
下面是VBF中来计算类型参数的加法<br />
T Add&lt;T&gt;(T a, T b, ICalculator&lt;T&gt; calc)<br />
{<br />
&nbsp; &nbsp; return calc.Add(a, b);<br />
}<br />
<br />
T Add&lt;T&gt;(T a, T b)<br />
{<br />
&nbsp; &nbsp; return Calculator&lt;T&gt;.Default.Add(a, b);<br />
}<br />
<br />
<br />
<br />
学习泛型，能从一个新的角度来思考问题的解决方法<img src="http://bbs.jmu.edu.cn/editor/images/smilies/default/21.gif"  alt="" /> （个人理解加转载） 
<img src ="http://www.cnblogs.com/wsky/aggbug/1122166.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41943/" target="_blank">[新闻]轮回－新浪推出Facebook模式的SNS</a>]]></description></item><item><title>.net平台上的ORM~Castle ActiveRecord</title><link>http://www.cnblogs.com/wsky/archive/2008/03/25/1122153.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Tue, 25 Mar 2008 14:46:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/archive/2008/03/25/1122153.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1122153.html</wfw:comment><comments>http://www.cnblogs.com/wsky/archive/2008/03/25/1122153.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1122153.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1122153.html</trackback:ping><description><![CDATA[Hibernate的优秀和在java平台的出色应用毋庸置疑,移植到.net上的NHibernate也是重量级ORM工具,各种开源的OR工具也多的不胜枚举,很多都很优秀,虽然.net3.0之后微软推出了Linq-to-Sql来作为主推的OR工具~但是3.0或者3.5毕竟还没有普及,现行开发中还是以.net2.0为主~(自行编写基础2.0的Linq应用的不包括~)<BR><BR>HQL作为Hibernate/NHibernate的查询语言,提供了完全面向对象的语言级查询功能~比起sql满天飞的情况,它的优势很明显,易于维护,易于复用,符合面向对象的思想~一个成功应用了ORM的项目,将找不到任何一个sql在代码层里~当然,作为一种映射关系,在达到灵活性的同时是需要付出一定的性能代价的~需要资源来维护这个映射关系,同时还存在的一些不可控的性能问题~记得以前有篇文章上一位项目经理谈到:只有在一个项目组的成员都清楚了解ORM的应用和所带来的性能问题的时候才会考虑在项目中实践ORM;<BR>的确,ORM为我们自动的维护数据库,自动的生成sql语句~很可能一个提取用了很多条语句,或者一次提取取出过多的数据~如果不能很好的使用和控制~那么~性能将有会很大问题;<BR><BR>IOC容器则是ORM不得不提及的东西~控制反转,依赖注入,java中已是久负盛名的实践;(还没有使用过,只是了解原理<IMG alt="" src="http://bbs.jmu.edu.cn/editor/images/smilies/default/17.gif">)<BR><BR>先介绍几个我所比较了解的ORM框架:<BR>Hibernate 不用说了 大家都听说过<BR><BR>IBaits:半自动化的工具,需要手动处理一些操作,但是这样还是提供了很大的灵活性,可控<BR><BR>NBear :博客园的Teedy开发的,现在版本到了V3,反响还是不错的,博客园的ORM貌似就是用这个框架<BR><BR>NetTiers 一个朋友推荐的,不过看了感觉不是很来劲,所以没有去多看有兴趣的可以看看这篇介绍:<A href="/iCaca/archive/2007/07/10/812632.aspx" target=_blank>http://www.cnblogs.com/iCaca/archive/2007/07/10/812632.aspx</A><BR><BR>SubSonic也是一个很不错的框架<BR><BR>Castle ActiveRecord 一个支持多个平台的框架,在ruby rails有很出色应用;这也是这几天项目中在实践的架构~ <img src ="http://www.cnblogs.com/wsky/aggbug/1122153.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41943/" target="_blank">[新闻]轮回－新浪推出Facebook模式的SNS</a>]]></description></item><item><title>asp.net下的RSA加密</title><link>http://www.cnblogs.com/wsky/articles/1098522.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Mon, 10 Mar 2008 04:42:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/articles/1098522.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1098522.html</wfw:comment><comments>http://www.cnblogs.com/wsky/articles/1098522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1098522.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1098522.html</trackback:ping><description><![CDATA[<font size="2">前天在写IPS的支付接口，照着文档写好后测试老不过~加密没有问题，参数也没有问题~和上海环迅公司的工程师交流后，居然是他们之前提供的文档说明有误~~<br />
<br />
因为要使用IPS的分账功能，要传递分账信息~关系到分钱的事自然不能马虎，接口要求对分账明文进行加密，用MD5,SHA1?这可不是密码~人家服务商还要解密出来使用的~<br />
那其他方式被人篡改岂了得？为了利益~，我们就自然得拿出各种加密手段来防止数据在传输途中被人篡改，非对称加密RSA就是一个解决方案，用一对密钥，公钥加密，私钥解密，若途中被修改，则可以辨认出来（哈，以前电子商务设计师没白考），当然，如果各位有高深的造诣，也可以自己编写加密解密算法~只要人家认可~<img src="http://bbs.jmu.edu.cn/editor/images/smilies/default/13.gif"  alt="" /> <br />
<br />
好，该说回题上来，.Net&nbsp; Framework，很好，很强大~其中与RSA加密算法相关的类主要有两个：RSA&nbsp; 类和RSACryptoServiceProvider&nbsp; 类。按照MSDN的说法RSA&nbsp; 类是&#8220;表示&nbsp; RSA&nbsp; 算法的所有实现均从中继承的基类&#8221;，而RSACryptoServiceProvider&nbsp; 类是&#8220;使用加密服务提供程序&nbsp; (CSP)&nbsp; 提供的&nbsp; RSA&nbsp; 算法的实现执行不对称加密和解密&#8221;。通常情况下，使用的是默认的结构生成一对密钥~这边就只介绍使用第三方机构提供的公钥来进行加密的方法。<br />
<br />
在电子商务里，证书等发放都要有第三方平台来证实和规范的，有一个最顶层的认证机构，是离线的，专门给各种机构发放证书~下层就是各类服务商，发布各自认可的证书，以此类推~各级所面向的对象不同~<br />
<br />
查阅MSDN可知其包含了D、DP、DQ、Exponent、InverseQ、Modulus、P、Q八个字段。加密时仅需要Exponent和&nbsp; Modulus两个值，可看成公钥。解密时所有字段都需要，可看成私钥。<br />
<br />
环迅公司给我提供的就是Exponent和&nbsp; Modulus两个值做为加密的公钥，私钥人家自然是自己留着解密用<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; /// &lt;summary&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; /// 使用第三方公钥生成RSA摘要<br />
&nbsp; &nbsp; &nbsp; &nbsp; /// &lt;/summary&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; /// &lt;param name="details"&gt;&lt;/param&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; /// &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; public static string GetRSAEncrypt(string details, string strRSAXml)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //&lt;Modulus&gt;&lt;Exponent&gt;加密必须提供<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; byte[] data = Encoding.UTF8.GetBytes(details);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <font color="darkorchid">RSACryptoServiceProvide&nbsp; </font>rsa = new RSACryptoServiceProvider();//初始化一个RSA服务对象<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rsa.<font color="darkorchid">FromXmlStrin</font>(strRSAXml);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <font color="darkorchid">RSAParameter&nbsp; </font>rsaParamsExcludePrivate = rsa.<font color="darkorchid">ExportParameter</font>(false);//公钥<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rsa.<font color="darkorchid">ImportParameter</font>(rsaParamsExcludePrivate); //导入公钥<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; byte[] EncryptedData = rsa.Encrypt(data, false);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return Convert.ToBase64String(EncryptedData);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
以上就是一个利用第三方机构提供的公钥生成RSA摘要的方法，<br />
这里公钥的导入是以xml的方式，比如这样的一个xml串<br />
<br />
<font color="red">&lt;RSAKeyValue&gt;&lt;Modulus&gt;</font>qjLGZkqhSe5ZDqPjx/VbzL+9hRVgSWmfiMLyf6NFdrt3+Y5MvTRhhVn0ZENl1<br />
yOsCcPKXywIAiiTLS+44ezOHZrXne2inY0a0aBjNV5paUJrT0IOH4xpAvqovKgoufu+oj74J9HolNs0KStJlbX/k<br />
R6SSnwpNJOGxmNGTLzu+ws=&lt;/Modulus&gt;<font color="red">&lt;Exponent&gt;AQAB&lt;/Exponent&gt;</font>&lt;/RSAKeyValue&gt;<br />
<br />
这是标准的格式，</font><font size="2"><font color="red">Exponent<font color="black">一般都是不变的</font></font></font><font size="2"><font color="black">AQAB，</font></font><font size="2"><font color="darkorchid">FromXmlStrin</font>(strRSAXml)用来读取xml串，从而初始化一个rsa对象，默认情况下，没有提供第三方密钥则使用.net内置的RSA算法，<br />
<font color="darkorchid">ExportParameters</font>(false)导出公钥,如果<font color="darkorchid">ExportParameter</font>(true)则导出私钥<font color="darkorchid">ImportParameter</font>(rsaParamsExcludePrivate)用于向rsa对象导入RSA参数，<font color="purple">RSAParameters</font>就是RSA参数类型，包含了如上所说的8个字段。<br />
<br />
现在，就可以加密我们的数据了~蛮久没写了，打字挺累~~~~<br />
<br />
描述有问题请多多指正~Thanks</font>
<img src ="http://www.cnblogs.com/wsky/aggbug/1098522.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41940/" target="_blank">[新闻]惠普139亿美元完成对EDS的收购</a>]]></description></item><item><title>2008,写写开场</title><link>http://www.cnblogs.com/wsky/articles/1062778.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Sat, 02 Feb 2008 09:12:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/articles/1062778.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1062778.html</wfw:comment><comments>http://www.cnblogs.com/wsky/articles/1062778.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1062778.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1062778.html</trackback:ping><description><![CDATA[最近....<br />
<br />
NET Framework开源了..<br />
<br />
MS想446亿收购雅虎了..<br />
<br />
过年了.放假一阵,要看看书了..<br />
<br />
要看点什么呢,做个列表<br />
<br />
整整Linq..多玩玩vs08<br />
<br />
多搞搞设计模式,设计规范,<br />
<br />
多学多整.keep doing..
<img src ="http://www.cnblogs.com/wsky/aggbug/1062778.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41939/" target="_blank">[新闻]搜狗五笔输入法发布</a>]]></description></item><item><title>第三方支付接口搜集(附下载)</title><link>http://www.cnblogs.com/wsky/articles/1052108.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Thu, 24 Jan 2008 13:12:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/articles/1052108.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1052108.html</wfw:comment><comments>http://www.cnblogs.com/wsky/articles/1052108.html#Feedback</comments><slash:comments>32</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1052108.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1052108.html</trackback:ping><description><![CDATA[<P style="TEXT-INDENT: 2em"><FONT color=#ff0000>刚整理的几个接口文档记录</FONT></P>
<P style="TEXT-INDENT: 2em">支付接口搜集 08年1月</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">第三方支付接口</P>
<P style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 快钱支付</P>
<P style="TEXT-INDENT: 2em">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支付宝</P>
<P style="TEXT-INDENT: 2em">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YeePay易宝</P>
<P style="TEXT-INDENT: 2em">4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 邮局支付（网汇通）</P>
<P style="TEXT-INDENT: 2em">5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安付通</P>
<P style="TEXT-INDENT: 2em">6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网银(chinabank)</P>
<P style="TEXT-INDENT: 2em">7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PayPal贝宝</P>
<P style="TEXT-INDENT: 2em">8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ips环迅支付</P>
<P style="TEXT-INDENT: 2em">9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 腾讯财付通</P>
<P style="TEXT-INDENT: 2em">10.&nbsp;&nbsp; NPS网上支付系统</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">1.快钱支付(银行/邮政汇) (<A href="https://www.99bill.com/website/">https://www.99bill.com/website/</A>)</P>
<P style="TEXT-INDENT: 2em">联系方式: <A href="http://www.99bill.com/seashell/html/corp/contactus.html">http://www.99bill.com/seashell/html/corp/contactus.html</A> </P>
<P style="TEXT-INDENT: 2em">网关地址: <A href="https://www.99bill.com/webapp/receiveMerchantInfoAction.do/">https://www.99bill.com/webapp/receiveMerchantInfoAction.do/</A> </P>
<P style="TEXT-INDENT: 2em">程序参考文档: 见附件快钱接口.rar</P>
<P style="TEXT-INDENT: 2em">特点: </P>
<P style="TEXT-INDENT: 2em">1.支持19种国内银行在线支付,</P>
<P style="TEXT-INDENT: 2em">2.支持2种线下支付方式: (在线生交易号码,客户至银行柜台或者邮局依此号码汇款,参考下图)</P>
<P style="TEXT-INDENT: 2em">a.通过邮局汇款 </P>
<P style="TEXT-INDENT: 2em">b.通过银行柜台汇款</P>
<P style="TEXT-INDENT: 2em">提供邮件号码或者手机号码后会将信息发至相应联系工具中</P>
<P style="TEXT-INDENT: 2em">银行前台结算方式图</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">2.支付宝支付(https://www.alipay.com/)</P>
<P style="TEXT-INDENT: 2em">联系方式: <A href="https://www.alipay.com/static/aboutalipay/contact.htm">https://www.alipay.com/static/aboutalipay/contact.htm</A> </P>
<P style="TEXT-INDENT: 2em">网关地址: <A href="https://www.alipay.com/cooperate/gateway.do">https://www.alipay.com/cooperate/gateway.do</A> </P>
<P style="TEXT-INDENT: 2em">签约入口: <A href="https://www.alipay.com/cooperate/btools_shop.htm">https://www.alipay.com/cooperate/btools_shop.htm</A></P>
<P style="TEXT-INDENT: 2em">程序参考文档: 见附件支付宝.rar</P>
<P style="TEXT-INDENT: 2em">特点:</P>
<P style="TEXT-INDENT: 2em">1.支持国内14种银行在线支付</P>
<P style="TEXT-INDENT: 2em">2.支持支付宝帐户余额直接付款</P>
<P style="TEXT-INDENT: 2em">3.支持”支付宝卡通”付款(映射至用户银行卡)</P>
<P style="TEXT-INDENT: 2em">4.支持邮政”网汇e”</P>
<P style="TEXT-INDENT: 2em">5.支付宝在国内拥有很大数量的用户,为”淘宝网”的支付工具;</P>
<P style="TEXT-INDENT: 2em">6.提供” 合并支付”功能,即” 是在对交易进行付款的时候，可以选择“等待买家付款”类型的交易，只用一次支付过程就实现了多笔交易的支付，提高了支付操作的效率和易用性。”(<A href="http://help.alipay.com/support/help_detail.htm?help_id=18756">http://help.alipay.com/support/help_detail.htm?help_id=18756</A>)</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">3.YeePay易宝支付 (http://www.yeepay.com/)</P>
<P style="TEXT-INDENT: 2em">联系方式: <A href="http://www.yeepay.com/zizhu/help.html">http://www.yeepay.com/zizhu/help.html</A> </P>
<P style="TEXT-INDENT: 2em">网关地址: 官方提供编程接口,DLL等相关工具</P>
<P style="TEXT-INDENT: 2em">程序参考文档:见附件易宝支付</P>
<P style="TEXT-INDENT: 2em">特点:</P>
<P style="TEXT-INDENT: 2em">1.支持多家银行;</P>
<P style="TEXT-INDENT: 2em">2.支持易宝会员支付</P>
<P style="TEXT-INDENT: 2em">3.支持电话支付&nbsp; 易宝支持工商银行95588，招商银行95555，建设银行95533，民生银行95568</P>
<P style="TEXT-INDENT: 2em">4.积分支付(通卡)</P>
<P style="TEXT-INDENT: 2em">5.支持手机银行支付 参考: <A href="http://www.yeepay.com/help/html/help26.html">http://www.yeepay.com/help/html/help26.html</A> </P>
<P style="TEXT-INDENT: 2em">6.为会员提供收款链接服务</P>
<P style="TEXT-INDENT: 2em">这是专为会员账户提供的免费收款服务。收款链接是直通会员账户的在线支付链接网址，如果您把自己的账户收款链接告知付款人（可以通过邮件、QQ、论坛）, 当付款人在浏览器里打开这个链接时，就能通过在线支付方式从银行卡划款到您的会员账户里。目前，收款链接支持国内19家银行的数十种银行卡的人民币账户支付。</P>
<P style="TEXT-INDENT: 2em">&nbsp;参考: <A href="http://www.yeepay.com/help/html/help019.html">http://www.yeepay.com/help/html/help019.html</A> </P>
<P style="TEXT-INDENT: 2em">7.提供 商户与企业（B2B）支付方式</P>
<P style="TEXT-INDENT: 2em">独家支持<A href="http://www.yeepay.com/help/html/help21-1.html">工商银行（全国）</A>，<A href="http://www.yeepay.com/help/html/help21-9.html">深圳发展银行（全国）</A>，B2B在线支付</P>
<P style="TEXT-INDENT: 2em">8.提供快捷查单服务</P>
<P style="TEXT-INDENT: 2em">9.自助接入服务,自助商户 &nbsp;参考: <A href="http://www.yeepay.com/zizhu/index.html">http://www.yeepay.com/zizhu/index.html</A> </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">4.邮局支付（网汇通） <A href="http://www.udpay.com.cn/">http://www.udpay.com.cn/</A> </P>
<P style="TEXT-INDENT: 2em">联系方式: <A href="https://www.udpay.com.cn/jsp/businesslogin/merchantjoin.jsp">https://www.udpay.com.cn/jsp/businesslogin/merchantjoin.jsp</A> </P>
<P style="TEXT-INDENT: 2em">网关地址:无需额外开发 注册后在官方后台获取支付代码即可嵌入网站中</P>
<P style="TEXT-INDENT: 2em">程序参考文档:</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">特点:</P>
<P style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 采用充值卡方式 </P>
<P style="TEXT-INDENT: 2em">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网汇通卡是中国邮政储蓄银行发行的一种不定额现金支付卡，可直接进行各种消费，如：充值财付通、充值手机、新浪邮箱续费、充值skype、购买Q币等。</P>
<P style="TEXT-INDENT: 2em">用户可以直接到当地邮局购买网汇通卡，新版网汇通卡可以是1元到2000元之间的任意金额，精确到分，例如：你可以购买201.08元的网汇通卡</P>
<P style="TEXT-INDENT: 2em">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必须要提供注册用户或者网汇通卡号;不支持直接网银支付;</P>
<P style="TEXT-INDENT: 2em">4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全国邮局均可购买网汇通充值卡</P>
<P style="TEXT-INDENT: 2em">5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无需额外开发支付接口等;</P>
<P style="TEXT-INDENT: 2em">网汇通代码生成</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">5. 安付通(<A href="http://help.eachnet.com/help/escrow/">http://help.eachnet.com/help/escrow/</A> )</P>
<P style="TEXT-INDENT: 2em">联系方式:</P>
<P style="TEXT-INDENT: 2em">网关地址: </P>
<P style="TEXT-INDENT: 2em">程序参考文档:</P>
<P style="TEXT-INDENT: 2em">特点:</P>
<P style="TEXT-INDENT: 2em">1. eBay易趣的支付工具;</P>
<P style="TEXT-INDENT: 2em">2. 不提供对外接口,无法在网站中嵌入使用</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">6.网银(chinabank) <A href="http://www.chinabank.com.cn/">http://www.chinabank.com.cn/</A> </P>
<P style="TEXT-INDENT: 2em">联系方式: <A href="http://www.chinabank.com.cn/gateway/about_us/contact/index.shtml">http://www.chinabank.com.cn/gateway/about_us/contact/index.shtml</A> </P>
<P style="TEXT-INDENT: 2em">网关地址: </P>
<P style="TEXT-INDENT: 2em">程序参考文档: 接口已经完成&nbsp;&nbsp;&nbsp;&nbsp; 附件网银.rar</P>
<P style="TEXT-INDENT: 2em">特点:</P>
<P style="TEXT-INDENT: 2em">1. 支持主流信用卡、借记卡 手续费为1% 其他全免</P>
<P style="TEXT-INDENT: 2em">2.线下支付 报信用卡信息，随时随地支付货款支付过程</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">7. PayPal贝宝 <A href="http://www.paypal.com/">http://www.paypal.com/</A> </P>
<P style="TEXT-INDENT: 2em">联系方式: <A href="https://www.paypal.com/us/cgi-bin/helpscr?cmd=_help&amp;t=escalateTab">https://www.paypal.com/us/cgi-bin/helpscr?cmd=_help&amp;t=escalateTab</A> </P>
<P style="TEXT-INDENT: 2em">网关地址: </P>
<P style="TEXT-INDENT: 2em">程序参考文档: 接口已经完成</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">8.ips环迅支付 <A href="http://www.ips.com.cn/">http://www.ips.com.cn/</A> </P>
<P style="TEXT-INDENT: 2em">联系方式: <A href="http://www.ips.com.cn/contactus/xsrx.shtml">http://www.ips.com.cn/contactus/xsrx.shtml</A> </P>
<P style="TEXT-INDENT: 2em">网关地址: </P>
<P style="TEXT-INDENT: 2em">程序参考文档: 接口已经完成</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">9.财付通(<A href="https://www.tenpay.com/">https://www.tenpay.com/</A> )</P>
<P style="TEXT-INDENT: 2em">联系方式: <A href="https://www.tenpay.com/zft/qa/qa_15.shtml">https://www.tenpay.com/zft/qa/qa_15.shtml</A> </P>
<P style="TEXT-INDENT: 2em">网关地址: <A href="https://www.tenpay.com/cgi-bin/med/show_opentrans.cgi">https://www.tenpay.com/cgi-bin/med/show_opentrans.cgi</A> </P>
<P style="TEXT-INDENT: 2em">程序参考文档: 见附件财付通接口文档.doc</P>
<P style="TEXT-INDENT: 2em">特点:</P>
<P style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持国内18家银行</P>
<P style="TEXT-INDENT: 2em">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供手机话费直冲;即时到帐</P>
<P style="TEXT-INDENT: 2em">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 机票订购</P>
<P style="TEXT-INDENT: 2em">4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 腾讯拍拍的购物支付方式;拥有大量使用人群;</P>
<P style="TEXT-INDENT: 2em">5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 财付通账户余额支付</P>
<P style="TEXT-INDENT: 2em">6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自动扣款业务&nbsp; 参考: <A href="https://www.tenpay.com/zft/qa/qa_28.shtml">https://www.tenpay.com/zft/qa/qa_28.shtml</A> </P>
<P style="TEXT-INDENT: 2em">7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 免手续费自助集成 <A href="http://union.tenpay.com/mch/?posid=125&amp;actid=84&amp;opid=32&amp;whoid=31">http://union.tenpay.com/mch/?posid=125&amp;actid=84&amp;opid=32&amp;whoid=31</A> </P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">&nbsp;</P>
<P style="TEXT-INDENT: 2em">10.&nbsp; NPS网上支付系统 <A href="http://www.nps.cn/">http://www.nps.cn/</A> </P>
<P style="TEXT-INDENT: 2em">联系方式: <A href="http://www.nps.cn/contact/contact.jsp">http://www.nps.cn/contact/contact.jsp</A> </P>
<P style="TEXT-INDENT: 2em">网关地址: <A href="https://payment.nps.cn/ReceiveMerchantAction.do">https://payment.nps.cn/ReceiveMerchantAction.do</A> </P>
<P style="TEXT-INDENT: 2em">程序参考文档: 见附件NPS支付系统接口</P>
<P style="TEXT-INDENT: 2em">特点:</P>
<P style="TEXT-INDENT: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持国内银行支付</P>
<P style="TEXT-INDENT: 2em">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持国外银行支付</P>
<P style="TEXT-INDENT: 2em">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持神州行充值卡支付 <A href="http://www.nps.cn/product/payment_easyown.jsp">http://www.nps.cn/product/payment_easyown.jsp</A> </P>
<P style="TEXT-INDENT: 2em">4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持电话支付 <A href="http://www.nps.cn/product/payment_phone.jsp">http://www.nps.cn/product/payment_phone.jsp</A> </P>
<P style="TEXT-INDENT: 2em">5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 商户可通过以下3种方式接入NPS支付平台：<A href="http://www.nps.cn/merchant/join_agreement.jsp">在线加盟</A>、<A href="http://www.nps.cn/contact/contact.jsp">业务联系</A>、<A href="http://www.nps.cn/contact/contact.jsp">代理商加盟</A>。</P>
<P style="TEXT-INDENT: 2em">6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接口类型: 1、购物车系统2、传款通系统3、直链行系统 4、神州行系统 5、外卡系统<BR><BR><BR><BR><BR>附上下载地址<BR><BR><A href="http://files.cnblogs.com/wsky/%e6%94%af%e4%bb%98%e6%8e%a5%e5%8f%a3%e6%90%9c%e9%9b%86%e6%96%87%e6%a1%a3%e4%bb%a5%e5%8f%8a%e9%99%84%e4%bb%b6.rar" target=_new>http://files.cnblogs.com/wsky/%e6%94%af%e4%bb%98%e6%8e%a5%e5%8f%a3%e6%90%9c%e9%9b%86%e6%96%87%e6%a1%a3%e4%bb%a5%e5%8f%8a%e9%99%84%e4%bb%b6.rar</A> </P><img src ="http://www.cnblogs.com/wsky/aggbug/1052108.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41938/" target="_blank">[新闻]新学年开始 大学生适用的十大互联网应用</a>]]></description></item><item><title>JOIN网络聚合收藏交流平台</title><link>http://www.cnblogs.com/wsky/articles/1046511.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Sun, 20 Jan 2008 13:39:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/articles/1046511.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1046511.html</wfw:comment><comments>http://www.cnblogs.com/wsky/articles/1046511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1046511.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1046511.html</trackback:ping><description><![CDATA[<p><a href="http://www.yesjoin.cn/">http://www.yesjoin.cn</a></p>
<p>网络信息聚合,RSS,收藏,链接导航,在线交流平台.</p>
<p>欢迎光临</p>
期待您的宝贵意见和建议
<img src ="http://www.cnblogs.com/wsky/aggbug/1046511.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41937/" target="_blank">[新闻]Google拟在9月发布自有浏览器 或采用火狐内核</a>]]></description></item><item><title>《Effect c#》《c#设计模式》《‘道不远人’控件开发》开始笔记，做个记录</title><link>http://www.cnblogs.com/wsky/articles/1004884.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Tue, 18 Dec 2007 10:44:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/articles/1004884.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1004884.html</wfw:comment><comments>http://www.cnblogs.com/wsky/articles/1004884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1004884.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1004884.html</trackback:ping><description><![CDATA[昨天收到书了《c#设计模式》《&#8216;道不远人&#8217;asp。net控件开发》，<br />
<br />
要硬抽出准备开始研读了，做个笔记，开始记录。<br />
<br />
这阵子一直在做项目，很久没有读读书补充补充了。要开始练练&#8220;道&#8221;了。<br />
<br />
&#8220;道&#8221;和&#8220;术&#8221;一起抓。<br />
<br />
<font face="Courier New">《Effect c#》也是不错的书，现在csdn上看连载，也把笔记一起做了。<br />
<br />
最近对设计模式和软工等的理解加深了很多，感觉很有裨益。设计先行。<br />
&nbsp;
<p><span style="font-family: 宋体"><br />
目录先来<img src="/CuteSoft_Client/CuteEditor/images/face23.gif" align="absMiddle" border="0"  alt="" /><br />
<br />
《</span>Effect C#<span style="font-family: 宋体">》笔记</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-12-17</p>
<p><a href="http://book.csdn.net/bookfiles/295/10029512571.shtml">http://book.csdn.net/bookfiles/295/10029512571.shtml</a></p>
<p><span style="font-family: 宋体">目录：</span></p>
<p><span style="font-family: 宋体">第一章：</span>c#<span style="font-family: 宋体">语言元素</span></p>
<p><span style="font-size: 9pt; font-family: Tahoma">&#183;<a href="http://book.csdn.net/bookfiles/295/10029512568.shtml" target="_blank"><span style="font-family: 宋体">条款</span>1<span style="font-family: 宋体">：使用属性代替可访问的数据成员</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512569.shtml" target="_blank"><span style="font-family: 宋体">条款</span>2<span style="font-family: 宋体">：运行时常量（</span>readonly<span style="font-family: 宋体">）优于编译时常量（</span>const<span style="font-family: 宋体">）</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512570.shtml" target="_blank"><span style="font-family: 宋体">条款</span>3<span style="font-family: 宋体">：操作符</span>is<span style="font-family: 宋体">或</span>as<span style="font-family: 宋体">优于强制转型</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512571.shtml" target="_blank"><span style="font-family: 宋体">条款</span>4<span style="font-family: 宋体">：使用</span>Conditional<span style="font-family: 宋体">特性代替</span>#if<span style="font-family: 宋体">条件编译</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512572.shtml" target="_blank"><span style="font-family: 宋体">条款</span>5<span style="font-family: 宋体">：总是提供</span>ToString()<span style="font-family: 宋体">方法</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512573.shtml" target="_blank"><span style="font-family: 宋体">条款</span>6<span style="font-family: 宋体">：明辨值类型和引用类型的使用场合</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512574.shtml" target="_blank"><span style="font-family: 宋体">条款</span>7<span style="font-family: 宋体">：将值类型尽可能实现为具有常量性和原子性的类型</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512575.shtml" target="_blank"><span style="font-family: 宋体">条款</span>8<span style="font-family: 宋体">：确保</span>0<span style="font-family: 宋体">为值类型的有效状态</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512576.shtml" target="_blank"><span style="font-family: 宋体">条款</span>9<span style="font-family: 宋体">：理解几个相等判断之间的关系</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512577.shtml" target="_blank"><span style="font-family: 宋体">条款</span>10<span style="font-family: 宋体">：理解</span>GetHashCode()<span style="font-family: 宋体">方法的缺陷</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512578.shtml" target="_blank"><span style="font-family: 宋体">条款</span>11<span style="font-family: 宋体">：优先采用</span>foreach<span style="font-family: 宋体">循环语句</span></a><br />
<br />
</span></p>
<p><span style="font-size: 9pt; font-family: Tahoma"><a href="http://club.book.csdn.net/book/155038.html"><span style="font-family: 宋体">第</span>3<span style="font-family: 宋体">章</span><span style="font-family: 宋体">使用</span>C#<span style="font-family: 宋体">表达设计</span></a></span></p>
<p><span style="font-size: 9pt; font-family: Tahoma">&#183;<a href="http://book.csdn.net/bookfiles/295/10029512602.shtml" target="_blank"><span style="font-family: 宋体">条款</span>19<span style="font-family: 宋体">：定义并实现接口优于继承类型</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512603.shtml" target="_blank"><span style="font-family: 宋体">条款</span>20<span style="font-family: 宋体">：明辨接口实现和虚方法重写</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512604.shtml" target="_blank"><span style="font-family: 宋体">条款</span>21<span style="font-family: 宋体">：使用委托表达回调</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512605.shtml" target="_blank"><span style="font-family: 宋体">条款</span>22<span style="font-family: 宋体">：使用事件定义外发接口</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512606.shtml" target="_blank"><span style="font-family: 宋体">条款</span>23<span style="font-family: 宋体">：避免返回内部类对象的引用</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512607.shtml" target="_blank"><span style="font-family: 宋体">条款</span>24<span style="font-family: 宋体">：声明式编程优于命令式编程</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512608.shtml" target="_blank"><span style="font-family: 宋体">条款</span>25<span style="font-family: 宋体">：尽可能将类型实现为可序列化的类型</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512609.shtml" target="_blank"><span style="font-family: 宋体">条款</span>26<span style="font-family: 宋体">：使用</span>IComparable<span style="font-family: 宋体">和</span>IComparer<span style="font-family: 宋体">接口实现排序关系</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512610.shtml" target="_blank"><span style="font-family: 宋体">条款</span>27<span style="font-family: 宋体">：避免</span>ICloneable<span style="font-family: 宋体">接口</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512611.shtml" target="_blank"><span style="font-family: 宋体">条款</span>28<span style="font-family: 宋体">：避免强制转换操作符</span></a><br />
&#183;<a href="http://book.csdn.net/bookfiles/295/10029512612.shtml" target="_blank"><span style="font-family: 宋体">条款</span>29<span style="font-family: 宋体">：只有当新版基类导致问题时才考虑使用</span>new<span style="font-family: 宋体">修饰符</span></a><br />
<br />
</span></p>
</font>
<img src ="http://www.cnblogs.com/wsky/aggbug/1004884.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41936/" target="_blank">[新闻]微软正在构思将Wi-Fi带入汽车</a>]]></description></item><item><title>又是一个数据采集。。</title><link>http://www.cnblogs.com/wsky/articles/1004858.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Tue, 18 Dec 2007 10:28:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/articles/1004858.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/1004858.html</wfw:comment><comments>http://www.cnblogs.com/wsky/articles/1004858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/1004858.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/1004858.html</trackback:ping><description><![CDATA[最近一直再跟同一个项目UEEEU，干了很多事，锻炼自然也很多，这阵子也是从早到晚的忙活，身体似乎都不知疲惫的说，<br />
其实忙着也好，有钱有经验嘛，多踏实哈。<br />
<br />
这一年来又变了很多，进步很多，<img src="/CuteSoft_Client/CuteEditor/images/face4.gif" align="absMiddle" border="0"  alt="" />年底了，项目进度也放慢了些，时间多了点，发现好久没在博客园露俩字了，就上来写写，<br />
本来在这是只打算放技术文章的，不过现在都不怎么爱上网易的博客了，就干脆都写一起了。<br />
<br />
再说抓数据，写正则真是本人一大技术空白。。<img src="/CuteSoft_Client/CuteEditor/images/emcry.gif" align="absMiddle" border="0"  alt="" />然后数据量太大，程序跑着就崩了。。<img src="/CuteSoft_Client/CuteEditor/images/emcrook.gif" align="absMiddle" border="0"  alt="" />自从开始写这种大量的数据采集之后，才感觉到啥叫cpu，啥叫内存大。<br />
线程方面的应用经验也比较缺乏。该乘年底任务松的时间补补了，订了几本书，好好看看<img src="/CuteSoft_Client/CuteEditor/images/emwink.gif" align="absMiddle" border="0"  alt="" /><br />
<br />
前阵在学校里准备组个开发小组，结果。。做java的人还是本专业的叫了几个，做dotnet的。。<br />
大学生呦。整天都是在干嘛。。。<br />
<br />
学校这周本科教学评估，重视的很，据说三年前就开始准备，今年新校区瞬间拔地而起，建的确实不错，不过俺们是享受不了多久了
<img src ="http://www.cnblogs.com/wsky/aggbug/1004858.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41936/" target="_blank">[新闻]微软正在构思将Wi-Fi带入汽车</a>]]></description></item><item><title>最近写的一个抓取网页内容(抓百度的)</title><link>http://www.cnblogs.com/wsky/articles/917395.html</link><dc:creator>wsky</dc:creator><author>wsky</author><pubDate>Mon, 08 Oct 2007 11:08:00 GMT</pubDate><guid>http://www.cnblogs.com/wsky/articles/917395.html</guid><wfw:comment>http://www.cnblogs.com/wsky/comments/917395.html</wfw:comment><comments>http://www.cnblogs.com/wsky/articles/917395.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wsky/comments/commentRss/917395.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wsky/services/trackbacks/917395.html</trackback:ping><description><![CDATA[找了个兼职开发的工作,这个算是个小任务,数据采集之前没有实际做过,这段代码效率不是很高..不过勉强算是写出来撒 汗~<br />
<br />
代码如下:<br />
&lt;%@ Page Language="C#" Debug="true" %&gt;<br />
&lt;%@ Import Namespace="System.Net" %&gt;<br />
&lt;%@ Import Namespace="System.IO" %&gt;<br />
&lt;%@ Import Namespace="System.Text.RegularExpressions" %&gt;<br />
&lt;%@ Import Namespace="System.Data.OleDb" %&gt;<br />
&lt;%@ Import Namespace="System.Web" %&gt;<br />
&lt;%@ Import Namespace="System.Web.UI" %&gt;<br />
&lt;%@ Import Namespace="System.Web.UI.WebControls" %&gt;<br />
<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
<br />
&lt;script runat="server"&gt;<br />
&nbsp;&nbsp;&nbsp; void InitializeCommapent()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Page.Load += new EventHandler(Page_Load);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; protected override void OnInit(EventArgs e)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeCommapent();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.OnInit(e);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; void Page_Load(object sender, EventArgs e)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!IsPostBack)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int[] pn=new int[10];//页标签<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pnn = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 10; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pnn &gt;= 100)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pnn2 = pnn;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pn[i] = pnn2/10;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pn[i] = pnn;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pnn += 20;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblHTML.Text = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int t = 0; t &lt; pn.Length; t++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebRequest req = WebRequest.Create("http://yp.baidu.com/m?word=%BE%C6%B5%EA&amp;tn=baiduyp&amp;ct=553648128&amp;rn=20&amp;lm=-1&amp;z=-1&amp;pn="+pn[t]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strResult = "";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebResponse result = req.GetResponse();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stream ReceiveStream = result.GetResponseStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //StreamReader sr=new StreamReader()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Byte[] read = new Byte[512];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int bytes = ReceiveStream.Read(read, 0, 512);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (bytes &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;