﻿<?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>博客园-dannyr's Blog</title><link>http://www.cnblogs.com/dannyr/</link><description>ColdFusion Delphi Flex Java .Net —— 一个都不能少！</description><language>zh-cn</language><lastBuildDate>Thu, 28 Aug 2008 01:08:45 GMT</lastBuildDate><pubDate>Thu, 28 Aug 2008 01:08:45 GMT</pubDate><ttl>60</ttl><item><title>Net1.1添加目录共享，并设置访问权限</title><link>http://www.cnblogs.com/dannyr/archive/2008/06/20/1226990.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Fri, 20 Jun 2008 09:03:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2008/06/20/1226990.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/1226990.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2008/06/20/1226990.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/1226990.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/1226990.html</trackback:ping><description><![CDATA[Net1.1没有专门封装好的WIN32管理类（2.0就方便多了），分享一下目录共享及权限的方法（网上找了许多都是文不对题的）
<P><BR><BR>权限定义：<BR>[Flags]<BR>&nbsp;&nbsp;&nbsp;public enum AccessPrivileges : uint{<BR>&nbsp;&nbsp;&nbsp;FILE_READ_DATA = 0x00000001,<BR>&nbsp;&nbsp;&nbsp;FILE_WRITE_DATA = 0x00000002,<BR>&nbsp;&nbsp;&nbsp;FILE_APPEND_DATA = 0x00000004,<BR>&nbsp;&nbsp;&nbsp;FILE_READ_EA = 0x00000008,<BR>&nbsp;&nbsp;&nbsp;FILE_WRITE_EA = 0x00000010,<BR>&nbsp;&nbsp;&nbsp;FILE_EXECUTE = 0x00000020,<BR>&nbsp;&nbsp;&nbsp;FILE_DELETE_CHILD = 0x00000040,<BR>&nbsp;&nbsp;&nbsp;FILE_READ_ATTRIBUTES = 0x00000080,<BR>&nbsp;&nbsp;&nbsp;FILE_WRITE_ATTRIBUTES&nbsp; = 0x00000100,</P>
<P>&nbsp;&nbsp;&nbsp;DELETE = 0x00010000,<BR>&nbsp;&nbsp;&nbsp;READ_CONTROL = 0x00020000,<BR>&nbsp;&nbsp;&nbsp;WRITE_DAC = 0x00040000,<BR>&nbsp;&nbsp;&nbsp;WRITE_OWNER = 0x00080000,<BR>&nbsp;&nbsp;&nbsp;SYNCHRONIZE = 0x00100000,</P>
<P>&nbsp;&nbsp;&nbsp;ACCESS_SYSTEM_SECURITY = 0x01000000,<BR>&nbsp;&nbsp;&nbsp;MAXIMUM_ALLOWED = 0x02000000,<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;GENERIC_ALL = 0x10000000,<BR>&nbsp;&nbsp;&nbsp;GENERIC_EXECUTE= 0x20000000,<BR>&nbsp;&nbsp;&nbsp;GENERIC_WRITE = 0x40000000,<BR>&nbsp;&nbsp;&nbsp;GENERIC_READ = 0x80000000<BR>&nbsp;&nbsp;}<BR><BR><BR>&nbsp;&nbsp;[Flags]<BR>&nbsp;&nbsp;&nbsp;enum AceFlags : uint{<BR>&nbsp;&nbsp;&nbsp;NonInheritAce = 0,<BR>&nbsp;&nbsp;&nbsp;ObjectInheritAce = 1,<BR>&nbsp;&nbsp;&nbsp;ContainerInheritAce = 2,<BR>&nbsp;&nbsp;&nbsp;NoPropagateInheritAce = 4,<BR>&nbsp;&nbsp;&nbsp;InheritOnlyAce = 8,<BR>&nbsp;&nbsp;&nbsp;InheritedAce = 16<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;[Flags]<BR>&nbsp;&nbsp;&nbsp;enum AceType : uint{<BR>&nbsp;&nbsp;&nbsp;AccessAllowed = 0,<BR>&nbsp;&nbsp;&nbsp;AccessDenied = 1,<BR>&nbsp;&nbsp;&nbsp;Audit = 2<BR>&nbsp;&nbsp;}<BR><BR><BR>流程：<BR><BR>//设置Everyone用户，可以选择其他用户或新建用户<BR>&nbsp;&nbsp;&nbsp;ManagementClass trustee = new ManagementClass("Win32_Trustee");<BR>&nbsp;&nbsp;&nbsp;trustee.Properties["Name"].Value = "Everyone";<BR>&nbsp;&nbsp;&nbsp;trustee.Properties["Domain"].Value = null;<BR>&nbsp;&nbsp;&nbsp;trustee.Properties["SID"].Value = new byte[]{1,1,0,0,0,0,0,1,0,0,0,0};</P>
<P>//设置只读/运行权限<BR>&nbsp;&nbsp;&nbsp;ManagementClass ace = new ManagementClass("Win32_ACE");<BR>&nbsp;&nbsp;&nbsp;ace.Properties["AccessMask"].Value = AccessPrivileges.GENERIC_READ<BR>&nbsp;&nbsp;&nbsp;&nbsp;| AccessPrivileges.FILE_READ_DATA | AccessPrivileges.FILE_READ_ATTRIBUTES | AccessPrivileges.FILE_READ_EA<BR>&nbsp;&nbsp;&nbsp;&nbsp;| AccessPrivileges.READ_CONTROL | AccessPrivileges.FILE_EXECUTE;<BR>&nbsp;&nbsp;&nbsp;ace.Properties["AceFlags"].Value = 3;//AceFlags.ObjectInheritAce | AceFlags.ContainerInheritAce ;<BR>&nbsp;&nbsp;&nbsp;ace.Properties["AceType"].Value = 0;//AceType.AccessAllowed;<BR>&nbsp;&nbsp;&nbsp;ace.Properties["Trustee"].Value = trustee;</P>
<P>//修改ACL设置<BR>&nbsp;&nbsp;&nbsp;ManagementObject secDescriptor = new ManagementClass("Win32_SecurityDescriptor");<BR>&nbsp;&nbsp;&nbsp;secDescriptor["ControlFlags"] = 4;<BR>&nbsp;&nbsp;&nbsp;secDescriptor["DACL"] = new ManagementObject[] { ace };</P>
<P><BR>&nbsp;&nbsp;&nbsp;//设置添加共享<BR>&nbsp;&nbsp;&nbsp;ManagementClass mc = new ManagementClass("win32_share");<BR>&nbsp;&nbsp;&nbsp;ManagementBaseObject inParams = mc.GetMethodParameters("Create");<BR>&nbsp;&nbsp;&nbsp;inParams["Path"] = "f:\\dannyr";<BR>&nbsp;&nbsp;&nbsp;inParams["Name"] = "share of dannyr";<BR>&nbsp;&nbsp;&nbsp;inParams["Type"] = 0x0;<BR>&nbsp;&nbsp;&nbsp;inParams["MaximumAllowed"] = null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=null 则用户数连接无限制<BR>&nbsp;&nbsp;&nbsp;inParams["Description"] = null;<BR>&nbsp;&nbsp;&nbsp;inParams["Password"] = null;<BR>&nbsp;&nbsp;&nbsp;inParams["Access"] = secDescriptor;&nbsp;&nbsp;//=null&nbsp;则使Everyone拥有完全控制权限</P>
<P>&nbsp;&nbsp;&nbsp;ManagementBaseObject outParams = mc.InvokeMethod("Create", inParams, null);<BR>&nbsp;&nbsp;&nbsp;uint returnValue = (uint)outParams.Properties["ReturnValue"].Value;<BR>&nbsp;&nbsp;&nbsp;string ErrorMessage = null;<BR>&nbsp;&nbsp;&nbsp;switch (returnValue)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 0: //Success<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 2: //Access denied <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage = "无权访问";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 8: //Unknown failure <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage = "未知错误";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 9: //Invalid name <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage = "非法的共享名";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 10: //Invalid level <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage = "非法的层次";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 21: //Invalid parameter <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage = "非法的参数";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 22: //Duplicate share<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage = "重复共享";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 23: //Redirected path <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage = "重定向路径";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 24: //Unknown device or directory <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage = "未知的目录";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 25: //Net name not found <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorMessage = "网络名不存在";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;default:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;}</P><img src ="http://www.cnblogs.com/dannyr/aggbug/1226990.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41924/" target="_blank">[新闻]中国软件协会：SAP羞辱国产软件是不正当竞争</a>]]></description></item><item><title>Access数据库的文本、备注数据类型的COLUMN_FLAGS说明</title><link>http://www.cnblogs.com/dannyr/archive/2008/05/22/1204554.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Thu, 22 May 2008 02:10:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2008/05/22/1204554.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/1204554.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2008/05/22/1204554.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/1204554.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/1204554.html</trackback:ping><description><![CDATA[Access数据库对于文本和备注类型的数据类型定义（DATA_TYPE）都是为130，无法直接区分，找了N多网页，包括MSDN都没有描述有关COLUMN_FLAGS的说明，还是自己分析一下：<br><br>&nbsp;&nbsp;&nbsp; COLUMN_FLAGS为64位(8字节)的十六进制的值，组合了数据类型和必填字段等信息<br><br>其中最后2个字节有效，最后一个字节一直为0x0A,有变化的是最后第二个字节，即：<br>&nbsp;&nbsp;&nbsp; 对于文本类型的为0x00;备注类型为0x80;<br>&nbsp;&nbsp;&nbsp; 对于非必填字段为0x40;必填字段为0x60<br><br>组合后：<br>&nbsp;&nbsp; 文本必填：&nbsp; 0x6A<br>&nbsp;&nbsp; 文本非必填：0x4A<br>&nbsp;&nbsp; 备注必填：&nbsp; 0xEA<br>&nbsp;&nbsp; 备注非必填：0xCA<br>&nbsp;&nbsp;&nbsp; <br>最后可以得到COLUMN_FLAGS右移7位后可以区分文本类型和备注类型<br><br><br>DataTable dt = m_OLEDBCon.GetOleDbSchemaTable(<br>&nbsp;&nbsp; &nbsp;OleDbSchemaGuid.Columns, <br>&nbsp;&nbsp; &nbsp;new object[] {null, null, "表名称", null});<br><br>DataRow[] drs = dt.Select("COLUMN_NAME='字段名称'");<br>if(drs.Length &gt; 0 &amp;&amp; Convert.ToInt32(drs[0]["DATA_TYPE"]) == 130) {<br>&nbsp;&nbsp; &nbsp;//文本类型<br>&nbsp;&nbsp; &nbsp;if ( (Convert.ToInt64(drs[0]["COLUMN_FLAGS"]) &gt;&gt; 7) == 1){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//=1为备注字段&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; &nbsp;}else{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=0为文本字段<br>&nbsp;&nbsp;&nbsp; }<br>}<img src ="http://www.cnblogs.com/dannyr/aggbug/1204554.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41923/" target="_blank">[新闻]福布斯：Facebook网站十大最火爆游戏</a>]]></description></item><item><title>生命诚可贵</title><link>http://www.cnblogs.com/dannyr/archive/2008/05/19/1202339.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Mon, 19 May 2008 01:34:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2008/05/19/1202339.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/1202339.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2008/05/19/1202339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/1202339.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/1202339.html</trackback:ping><description><![CDATA[<br>灰色<br><img src ="http://www.cnblogs.com/dannyr/aggbug/1202339.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41922/" target="_blank">[新闻]谷歌允许用户评论搜索结果调整顺序</a>]]></description></item><item><title>如何关闭子线程？征集析构函数与多线程的讨论！</title><link>http://www.cnblogs.com/dannyr/archive/2007/09/28/909573.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Fri, 28 Sep 2007 08:42:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2007/09/28/909573.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/909573.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2007/09/28/909573.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/909573.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/909573.html</trackback:ping><description><![CDATA[下面的代码是可以执行，大家都来说说为什么这个程序不会自动退出？<BR>也就是说mian函数执行完毕后，为什么.net不会释放ThreadEx对象？<BR><BR>
<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://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;System;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;System.Threading;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_74_755_Open_Image onclick="this.style.display='none'; Codehighlighter1_74_755_Open_Text.style.display='none'; Codehighlighter1_74_755_Closed_Image.style.display='inline'; Codehighlighter1_74_755_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_74_755_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_755_Closed_Text.style.display='none'; Codehighlighter1_74_755_Open_Image.style.display='inline'; Codehighlighter1_74_755_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;ThreadEx&nbsp;:&nbsp;IDisposable</SPAN><SPAN id=Codehighlighter1_74_755_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://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_74_755_Open_Text><SPAN style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;Thread&nbsp;thread;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">volatile</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;bExit;<BR><IMG id=Codehighlighter1_149_263_Open_Image onclick="this.style.display='none'; Codehighlighter1_149_263_Open_Text.style.display='none'; Codehighlighter1_149_263_Closed_Image.style.display='inline'; Codehighlighter1_149_263_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_149_263_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_149_263_Closed_Text.style.display='none'; Codehighlighter1_149_263_Open_Image.style.display='inline'; Codehighlighter1_149_263_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;ThreadEx()</SPAN><SPAN id=Codehighlighter1_149_263_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://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_149_263_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">ThreadEx&nbsp;output<IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bExit&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thread&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Thread(OnThread);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thread.Start();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_278_341_Open_Image onclick="this.style.display='none'; Codehighlighter1_278_341_Open_Text.style.display='none'; Codehighlighter1_278_341_Closed_Image.style.display='inline'; Codehighlighter1_278_341_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_278_341_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_278_341_Closed_Text.style.display='none'; Codehighlighter1_278_341_Open_Image.style.display='inline'; Codehighlighter1_278_341_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">~</SPAN><SPAN style="COLOR: #000000">ThreadEx()</SPAN><SPAN id=Codehighlighter1_278_341_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://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_278_341_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">~ThreadEx&nbsp;output<IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bExit&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_368_524_Open_Image onclick="this.style.display='none'; Codehighlighter1_368_524_Open_Text.style.display='none'; Codehighlighter1_368_524_Closed_Image.style.display='inline'; Codehighlighter1_368_524_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_368_524_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_368_524_Closed_Text.style.display='none'; Codehighlighter1_368_524_Open_Image.style.display='inline'; Codehighlighter1_368_524_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;OnThread()</SPAN><SPAN id=Codehighlighter1_368_524_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://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_368_524_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_383_482_Open_Image onclick="this.style.display='none'; Codehighlighter1_383_482_Open_Text.style.display='none'; Codehighlighter1_383_482_Closed_Image.style.display='inline'; Codehighlighter1_383_482_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_383_482_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_383_482_Closed_Text.style.display='none'; Codehighlighter1_383_482_Open_Image.style.display='inline'; Codehighlighter1_383_482_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN id=Codehighlighter1_383_482_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://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_383_482_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_397_413_Open_Image onclick="this.style.display='none'; Codehighlighter1_397_413_Open_Text.style.display='none'; Codehighlighter1_397_413_Closed_Image.style.display='inline'; Codehighlighter1_397_413_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_397_413_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_397_413_Closed_Text.style.display='none'; Codehighlighter1_397_413_Open_Image.style.display='inline'; Codehighlighter1_397_413_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(bExit)</SPAN><SPAN id=Codehighlighter1_397_413_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://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_397_413_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">break</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Thread&nbsp;output<IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(</SPAN><SPAN style="COLOR: #000000">1000</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Thread&nbsp;exit<IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_548_567_Open_Image onclick="this.style.display='none'; Codehighlighter1_548_567_Open_Text.style.display='none'; Codehighlighter1_548_567_Closed_Image.style.display='inline'; Codehighlighter1_548_567_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_548_567_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_548_567_Closed_Text.style.display='none'; Codehighlighter1_548_567_Open_Image.style.display='inline'; Codehighlighter1_548_567_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Close()</SPAN><SPAN id=Codehighlighter1_548_567_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://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_548_567_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bExit&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_593_690_Open_Image onclick="this.style.display='none'; Codehighlighter1_593_690_Open_Text.style.display='none'; Codehighlighter1_593_690_Closed_Image.style.display='inline'; Codehighlighter1_593_690_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_593_690_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_593_690_Closed_Text.style.display='none'; Codehighlighter1_593_690_Open_Image.style.display='inline'; Codehighlighter1_593_690_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Dispose()&nbsp;</SPAN><SPAN id=Codehighlighter1_593_690_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://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_593_690_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;TODO:&nbsp;&nbsp;添加&nbsp;ThreadEx.Dispose&nbsp;实现</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">~Dispose&nbsp;output<IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bExit&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_712_753_Open_Image onclick="this.style.display='none'; Codehighlighter1_712_753_Open_Text.style.display='none'; Codehighlighter1_712_753_Closed_Image.style.display='inline'; Codehighlighter1_712_753_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_712_753_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_712_753_Closed_Text.style.display='none'; Codehighlighter1_712_753_Open_Image.style.display='inline'; Codehighlighter1_712_753_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;Main()</SPAN><SPAN id=Codehighlighter1_712_753_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://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_712_753_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadEx&nbsp;threadEx&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ThreadEx();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><img src ="http://www.cnblogs.com/dannyr/aggbug/909573.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41921/" target="_blank">[新闻]Internet 另一超级漏洞被公布</a>]]></description></item><item><title>function object(functor) ...</title><link>http://www.cnblogs.com/dannyr/archive/2007/09/15/893699.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Sat, 15 Sep 2007 00:03:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2007/09/15/893699.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/893699.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2007/09/15/893699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/893699.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/893699.html</trackback:ping><description><![CDATA[As is known,in many advanced programming languages(esp. object oriented ones) like c/c++,c#,Java,etc., the function is only one of the programming syntax constructs,unlike that in some pure interpreted programming lanuage such as Javascript,SmallTalk and so on,which are also object oriented,the function itself is a first-class object,however,for example:<br>&nbsp;<br><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;Foo()&nbsp;{&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;note:&nbsp;Foo&nbsp;is&nbsp;an&nbsp;object</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.sampleMemVar&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">123</span><span style="color: rgb(0, 0, 0);">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.sampleMemFun&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">()&nbsp;{<img src="http://www.cnblogs.com/images/dot.gif">};&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;create&nbsp;a&nbsp;new&nbsp;function&nbsp;object</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(<img src="http://www.cnblogs.com/images/dot.gif">)&nbsp;{};&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;anonymouse&nbsp;function&nbsp;object</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;f&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(<img src="http://www.cnblogs.com/images/dot.gif">){};&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;equal&nbsp;to&nbsp;function&nbsp;f(<img src="http://www.cnblogs.com/images/dot.gif">)&nbsp;{}&nbsp;declaration,also&nbsp;create&nbsp;new&nbsp;function&nbsp;object</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">};</span></div><br>&nbsp;<br>As a result,foo can behaves in the same way as regular object do,that is to say,foo can have properties,member functions,and can be extended,see below:<br>&nbsp;<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);"><br>Foo.prototype.sampleVar&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br>Foo.prototype.sampleFun&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(arglist<img src="http://www.cnblogs.com/images/dot.gif">)&nbsp;{<img src="http://www.cnblogs.com/images/dot.gif">};&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;prototype&nbsp;is&nbsp;one&nbsp;of&nbsp;the&nbsp;properties&nbsp;of&nbsp;object&nbsp;Foo</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">Foo.sampleStaticVar&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">sample&nbsp;static&nbsp;variable</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;static&nbsp;variable</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">Foo.sampleStaticFun&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">()<img src="http://www.cnblogs.com/images/dot.gif">&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;extend&nbsp;Foo&nbsp;with&nbsp;a&nbsp;static&nbsp;function</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;foo&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Foo();&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;applying&nbsp;new&nbsp;operator&nbsp;on&nbsp;a&nbsp;function&nbsp;object&nbsp;causing&nbsp;an&nbsp;instance&nbsp;of&nbsp;an&nbsp;Object&nbsp;is&nbsp;created&nbsp;with&nbsp;the&nbsp;members&nbsp;declared&nbsp;in&nbsp;the&nbsp;constructor,i.e.,Foo.</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">foo.toString();&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;inherited&nbsp;from&nbsp;Object</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 255);">typeof</span><span style="color: rgb(0, 0, 0);">(foo);&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;you&nbsp;can&nbsp;call&nbsp;typeof&nbsp;operator&nbsp;on&nbsp;foo,where&nbsp;Object&nbsp;is&nbsp;returned</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 255);">typeof</span><span style="color: rgb(0, 0, 0);">(Foo);&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;call&nbsp;tpyeof&nbsp;operator&nbsp;on&nbsp;Foo,where&nbsp;Function&nbsp;is&nbsp;returned</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">printf(Foo.sampleStaticVar);<br>foo.sampleMemVar&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">100</span><span style="color: rgb(0, 0, 0);">;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;access&nbsp;instance&nbsp;variable</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">Foo.sampleStaticFun(<img src="http://www.cnblogs.com/images/dot.gif">);&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;call&nbsp;static&nbsp;method</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">foo.sampleMemFun(<img src="http://www.cnblogs.com/images/dot.gif">);&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;call&nbsp;instance&nbsp;method</span></div><br>&nbsp;<br>No need to enumerate the examples any more. You can see that the function has no much differences from general objects,except that it does inherites from Function on the other hand.<br>&nbsp;<br>Then how about the situation in c/c++,or others?<br>For example, we have a function,which can perform some action on two operands,and the specified action can only be determined at runtime.Then how to solve this problem?<br>&nbsp;<br>Of course,you can use (memebr) function pointer like:<br>&nbsp;<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">typedef&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">OpFunc)(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;left,</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;right);</span></div><br><br>&nbsp;<br>but you should first know the argument types and return type.<br>how about template?<br>&nbsp;<br><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg1,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg2,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>_Result(</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">OpFunc)(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2);&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;this&nbsp;does&nbsp;not&nbsp;compile</span></div><br>&nbsp;<br>You could never use template directly on typedef or object declarations.<br>Then maybe you want to encapsulate the concept in this way:<br>&nbsp;<br><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg1,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg2,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Performer<br>{<br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;typedef&nbsp;_Result&nbsp;(</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">OpFunc)(_Arg1,_Arg2);<br>&nbsp;Performer(OpFunc&nbsp;_opfunc)&nbsp;:&nbsp;m_opfunc(_opfunc)<br>&nbsp;{<br>&nbsp;&nbsp;_ASSERT(NULL&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;_opfunc);<br>&nbsp;}<br>&nbsp;_Result&nbsp;Perform(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2)<br>&nbsp;{<br>&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;m_opfunc(arg1,arg2);<br>&nbsp;}<br></span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;OpFunc&nbsp;m_opfunc;<br>};</span></div><br>&nbsp;<br>Yes,this works. However,function pointer itself is not an object oriented construct,as a result,lack of flexibility and extensibility.<br>&nbsp;<br>Then,if you're familar with c#,you may want to use delegate.<br>And unlike template in c++,you can apply generic on delegate directly.<br>&nbsp;<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">delegate</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result&nbsp;OpFunc</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,_Arg2,_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2);<br></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Performer</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,&nbsp;_Arg2,&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;OpFunc</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,&nbsp;_Arg2,&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;opfun&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;Performer(OpFunc</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,&nbsp;_Arg2,&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;_opfun)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;_opfun)&nbsp;</span><span style="color: rgb(0, 0, 255);">throw</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ArgumentException();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.opfun&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;_opfun;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result&nbsp;Perform(_Arg1&nbsp;arg1,&nbsp;_Arg2&nbsp;arg2)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;opfun(arg1,&nbsp;arg2);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div><br>&nbsp;<br>you can even implement you delegate in c++,only by making a wrapper to any function pointer.<br>No matter what you do with delegate,you are actually using function pointers,then again,lack of flexibility and extensibility.<br>&nbsp;<br>So, why not use polymorphism?<br>If we can store the runtime action performer in an object,e.g.,action_performer,and we call the method on this object,where different object has different implementation for that action.<br>&nbsp;<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);"><br>template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg1,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg2,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;PerformerBase<br>{<br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;</span><span style="color: rgb(0, 0, 255);">virtual</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result&nbsp;Perform(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2)&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br>};<br>template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg1,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg2,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;AddPerformer&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;PerformerBase</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,_Arg2,_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>{<br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;_Result&nbsp;Perform(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2)<br>&nbsp;{<br>&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;arg1&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;arg2;<br>&nbsp;}<br>};<br>template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg1,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg2,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;MinusPerformer&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;PerformerBase</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,_Arg2,_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>{<br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;_Result&nbsp;Perform(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2)<br>&nbsp;{<br>&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;arg1&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">&nbsp;arg2;<br>&nbsp;}<br>};</span></div><br>&nbsp;<br>Yes,this also works and we can gain much flexibility and extensibility from this solution.<br>Then if we we can use function object as we do in Javascript,we can gain much more.<br>Forget operator overloading?( return to your c++ textbook for a look:-))<br>we can obtain a function object by encapsulate the function and overload it call operator,i.e.().<br>For example,<br>&nbsp;<br><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Functor<br>{<br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">operator</span><span style="color: rgb(0, 0, 0);">()(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;a,</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;b)&nbsp;{&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;a&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;b;&nbsp;}<br>};<br>Functor&nbsp;myFuncObj;<br></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;x&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;myFuncObj(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">);</span></div><br>&nbsp;<br>Quite easy,right?<br>&nbsp;<br>OK,then let's return to our problem,which is now trivial,given below:<br>&nbsp;<br><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg1,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg2,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;FunctorBase<br>{<br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;</span><span style="color: rgb(0, 0, 255);">virtual</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result&nbsp;</span><span style="color: rgb(0, 0, 255);">operator</span><span style="color: rgb(0, 0, 0);">()(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2)&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br>};<br>template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg1,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg2,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;AddFunctor&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;FunctorBase</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,_Arg2,_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>{<br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;_Result&nbsp;</span><span style="color: rgb(0, 0, 255);">operator</span><span style="color: rgb(0, 0, 0);">()(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2)<br>&nbsp;{<br>&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;arg1&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;arg2;<br>&nbsp;}<br>};<br>template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg1,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg2,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;MinusFunctor&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;FunctorBase</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,_Arg2,_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>{<br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;_Result&nbsp;</span><span style="color: rgb(0, 0, 255);">operator</span><span style="color: rgb(0, 0, 0);">()(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2)<br>&nbsp;{<br>&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;arg1&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">&nbsp;arg2;<br>&nbsp;}<br>};<br>template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg1,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Arg2,</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Performer<br>{<br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;Performer(FunctorBase</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,_Arg2,_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;functor)<br>&nbsp;&nbsp;:&nbsp;m_functor(functor)<br>&nbsp;{<br>&nbsp;}<br>&nbsp;_Result&nbsp;Perform(_Arg1&nbsp;arg1,_Arg2&nbsp;arg2)<br>&nbsp;{<br>&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;m_functor(arg1,arg2);<br>&nbsp;}<br></span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">:<br>&nbsp;FunctorBase</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">_Arg1,_Arg2,_Result</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;m_functor;<br>};</span></div><br>&nbsp;<br>In conclusion, you can implement your own specific function object(functor) even in c++,c#,etc.,then you can use function as general objects in your program with high flexibility,resuability and extensibility. Actually, if you look into the STL,you will find that many functions receive a functor as a parameter,e.g.,find_if in &lt;algorithm&gt; receives a predictor as a searching criteria. see declaration below:<br>&nbsp;<br><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">template</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;InputIterator,&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Predicate</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>&nbsp;&nbsp;&nbsp;InputIterator&nbsp;find_if(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputIterator&nbsp;_First,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputIterator&nbsp;_Last,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Predicate&nbsp;_Pred<br>&nbsp;&nbsp;&nbsp;);</span></div><br>&nbsp;<br>then you can call like this:<br><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;arr[]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;{</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">};<br></span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">&nbsp;found&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;find_if(arr,arr&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;_countof(arr),greater</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">));&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;find&nbsp;element&nbsp;that&nbsp;is&nbsp;greater&nbsp;thatn&nbsp;2.</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;</span></div><br>functors are declared in &lt;functional&gt; in STL.<br><br><img src ="http://www.cnblogs.com/dannyr/aggbug/893699.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41920/" target="_blank">[新闻]3 个独特的未来搜索引擎</a>]]></description></item><item><title>Dev GridControl的Outlook风格定制</title><link>http://www.cnblogs.com/dannyr/archive/2007/08/06/844735.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Mon, 06 Aug 2007 05:27:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2007/08/06/844735.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/844735.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2007/08/06/844735.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/844735.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/844735.html</trackback:ping><description><![CDATA[<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://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">GridView属性设置：</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">GridView.OptionsView.GroupDrawMode&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;GroupDrawMode.Office2003;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>GridView.OptionsView.ShowVertLines&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">GridColumn分组列属性设置：</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">GridColumn.GroupIndex&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>GridColumn.GroupInterval&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;ColumnGroupInterval.DateRange;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">GridControl数据绑定后，设置GridView</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">gvReserve.SetRowExpanded(</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>gvReserve.SetRowExpanded(</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">);</SPAN></DIV><BR><IMG height=389 alt=a.JPG src="http://www.cnblogs.com/images/cnblogs_com/dannyr/a.JPG" width=585 border=0><img src ="http://www.cnblogs.com/dannyr/aggbug/844735.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41919/" target="_blank">[新闻]诺基亚新机N85 N79发布</a>]]></description></item><item><title>WinForm MDI动态加载form</title><link>http://www.cnblogs.com/dannyr/archive/2007/07/27/833735.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Fri, 27 Jul 2007 07:06:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2007/07/27/833735.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/833735.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2007/07/27/833735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/833735.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/833735.html</trackback:ping><description><![CDATA[<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://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;frm.MdiParent&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">frm.WindowState&nbsp;=&nbsp;FormWindowState.Maximized;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;frm.Dock&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;DockStyle.Fill;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">设置为ChildForm和MainForm一起拉伸</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;frm.FormBorderStyle&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;FormBorderStyle.None;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.Client_Event&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Message_Event(frm.OnClientEvent);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;frm.m_Operator&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;m_Operator;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;frm;</SPAN></DIV><img src ="http://www.cnblogs.com/dannyr/aggbug/833735.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41918/" target="_blank">[新闻]数据库市场:微软和甲骨文快速进步 威胁IBM</a>]]></description></item><item><title>DevExpress's tip</title><link>http://www.cnblogs.com/dannyr/archive/2007/07/24/829245.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Tue, 24 Jul 2007 03:43:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2007/07/24/829245.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/829245.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2007/07/24/829245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/829245.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/829245.html</trackback:ping><description><![CDATA[DevExpress.XtraEditors.ComboBoxEdit<BR>下拉框是否允许输入<BR>Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor<img src ="http://www.cnblogs.com/dannyr/aggbug/829245.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41917/" target="_blank">[新闻]深度分析：全球千亿美元市值IT企业7月榜单点评</a>]]></description></item><item><title>检测浏览器类型的js</title><link>http://www.cnblogs.com/dannyr/archive/2007/07/06/808225.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Fri, 06 Jul 2007 03:22:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2007/07/06/808225.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/808225.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2007/07/06/808225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/808225.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/808225.html</trackback:ping><description><![CDATA[<PRE><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://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">var</SPAN><SPAN style="COLOR: #000000">&nbsp;firefox&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;document.getElementById&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">document.all;</SPAN></DIV></PRE><BR><BR><PRE>IE浏览器和FireFox浏览器都有getElementById方法，而FireFox没有document.all方法，因此当上面firefox变量为false说明为IE浏览器。</PRE><img src ="http://www.cnblogs.com/dannyr/aggbug/808225.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41916/" target="_blank">[新闻]中移动上半年净利549亿元 每天盈利3亿</a>]]></description></item><item><title>Spry1.4 下载</title><link>http://www.cnblogs.com/dannyr/archive/2007/01/17/622833.html</link><dc:creator>dannyr一个都不能少！</dc:creator><author>dannyr一个都不能少！</author><pubDate>Wed, 17 Jan 2007 08:10:00 GMT</pubDate><guid>http://www.cnblogs.com/dannyr/archive/2007/01/17/622833.html</guid><wfw:comment>http://www.cnblogs.com/dannyr/comments/622833.html</wfw:comment><comments>http://www.cnblogs.com/dannyr/archive/2007/01/17/622833.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/dannyr/comments/commentRss/622833.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dannyr/services/trackbacks/622833.html</trackback:ping><description><![CDATA[<P><A href="http://dannyr.nbdown.net/spry/Spry_P1_4_12-14.zip">http://dannyr.nbdown.net/spry/Spry_P1_4_12-14.zip</A><BR><BR></P><img src ="http://www.cnblogs.com/dannyr/aggbug/622833.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41915/" target="_blank">[新闻]中国移动谋划推出Web2.0产品mspaces.net</a>]]></description></item></channel></rss>