<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Frog</title><subtitle type="text">A person with a very limited outlook</subtitle><id>http://feed.cnblogs.com/blog/u/36003/rss</id><updated>2012-05-25T03:03:27Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/36003/rss"/><entry><id>http://www.cnblogs.com/MythYsJh/archive/2011/05/12/2044682.html</id><title type="text">关于ExecuteScalar您可能会疏忽的地方</title><summary type="text">ExecuteScalar的返回值该如何判空？</summary><published>2011-05-12T10:36:00Z</published><updated>2011-05-12T10:36:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2011/05/12/2044682.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2011/05/12/2044682.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;大家都很熟悉SqlCommand的ExecuteScalar方法：&lt;/p&gt;    &lt;p&gt;object obj&amp;#160; = command.ExecuteScalar();&lt;/p&gt;    &lt;p&gt;该方法会返回一个标量值。很多时候，我们需要对obj进行是否为空的验证。这时候问题就来了，到底是该&lt;/p&gt;    &lt;p&gt;if( obj != null )&lt;/p&gt;    &lt;p&gt;还是&lt;/p&gt;    &lt;p&gt;if( obj != DBNull.Value)?&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;首先我们来看看ExecuteScalar的使用场景&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;配合T-Sql的聚合函数使用，如Count &lt;/li&gt;      &lt;li&gt;当返回某一行特定列时也可以使用 &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;总之就是当查询结果只是一个标量值的时候就可以使用。&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;接下来我们假定有这样一张数据表(Student)：      &lt;table border="0" cellspacing="0" cellpadding="2" width="137"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="67"&gt;ID&lt;/td&gt;            &lt;td valign="top" width="68"&gt;PK&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="67"&gt;Name&lt;/td&gt;            &lt;td valign="top" width="68"&gt;NOT NULL&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top" width="67"&gt;Age&lt;/td&gt;            &lt;td valign="top" width="68"&gt;NULL&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/p&gt;    &lt;p&gt;再假设该表有如下数据：&lt;/p&gt;    &lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="133"&gt;ID&lt;/td&gt;          &lt;td valign="top" width="133"&gt;Name&lt;/td&gt;          &lt;td valign="top" width="133"&gt;Age&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="133"&gt;1&lt;/td&gt;          &lt;td valign="top" width="133"&gt;Tom&lt;/td&gt;          &lt;td valign="top" width="133"&gt;NULL&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="133"&gt;2&lt;/td&gt;          &lt;td valign="top" width="133"&gt;Mike&lt;/td&gt;          &lt;td valign="top" width="133"&gt;NULL&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;如果我们要取得所有Student中Age最大值，可以如下&lt;/p&gt;    &lt;p&gt;SELECT MAX(Age) FROM dbo.Student WITH(NOLOCK)&lt;/p&gt;    &lt;p&gt;在.NET 这一层我们就可以使用ExecuteScalar来取得值了。我们知道T-Sql的结果是NULL,但在.NET这边呢？我们一跟踪就会发现是DBNull.&lt;/p&gt;    &lt;p&gt;因此我们可以就此下结论了么？不能。&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;紧接着再来看种情形。要求我们获取ID=3的学生的姓名&lt;/p&gt;    &lt;p&gt;SELECT TOP 1 Name FROM dbo.Student WITH(NOLOCK)&lt;/p&gt;    &lt;p&gt;WHERE ID = 3&lt;/p&gt;    &lt;p&gt;很显然，该语句的结果是一个空的结果集。&lt;/p&gt;    &lt;p&gt;这时候再去跟踪你就会发现返回值为null.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;因此对于很多经常只简单判断！=null 或者!= DNNull.Value的童鞋要注意了，说不定什么时候代码就出问题了。&lt;/p&gt;    &lt;p&gt;再简单总结下：当sql语句返回NULL时，.NET这一端的返回值为DBNull.Value&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 当sql语句这一端为空结果集时，.NET这一端为null.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;希望对各位能有帮助。&lt;/p&gt;&lt;/blockquote&gt;  &lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/2044682.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2011/05/12/2044682.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MythYsJh/archive/2011/02/19/1958317.html</id><title type="text">[.Net 4.0]用4.0实现基于Push的Observer模式</title><summary type="text">用4.0实现基于Push的观察者模式</summary><published>2011-02-18T21:26:00Z</published><updated>2011-02-18T21:26:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2011/02/19/1958317.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2011/02/19/1958317.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;在4.0里，微软为我们实现基于Push的观察者模式提供了原生支持：增加了IObserver&amp;lt;T&amp;gt;和IObservable&amp;lt;T&amp;gt;两个接口。&lt;/p&gt;    &lt;p&gt;IObserver&amp;lt;T&amp;gt;: 表示接收通知（观察器）的类。 &lt;/p&gt;    &lt;p&gt;IObservable&amp;lt;T&amp;gt;:表示发送通知（提供程序）的类；&lt;/p&gt;    &lt;p&gt;T :表示提供通知信息的类。&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;下面就应这几个接口来实现常用于解释观察者模式的模型-报纸订阅。&lt;/p&gt;    &lt;p&gt;1.创建杂志&lt;/p&gt;    &lt;div&gt;     &lt;div&gt;           &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Magazine&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; m_Title;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Title&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; m_Title; }&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; { m_Title = &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;; }&lt;br/&gt;        }&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; m_Issue;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Issue&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; m_Issue; }&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; { m_Issue = &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;; }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Magazine(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; title, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; issue)&lt;br/&gt;        {&lt;br/&gt;            m_Title = title;&lt;br/&gt;            m_Issue = issue;&lt;br/&gt;        }&lt;br/&gt;    }    &lt;/div&gt;    &lt;br /&gt;    &lt;br /&gt;2. 接收通知的类即订阅者(这里随便取了哥名字叫Customer)&lt;/div&gt;  &lt;div&gt;    &lt;div&gt;          &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Customer : IObserver&amp;lt;Magazine&amp;gt;&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; m_Name;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Name&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; m_Name; }&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; { m_Name = &lt;span style="color: #0000ff"&gt;value&lt;/span&gt;; }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Customer(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; name)&lt;br/&gt;        {&lt;br/&gt;            m_Name = name;&lt;br/&gt;        }&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnCompleted()&lt;br/&gt;        {&lt;br/&gt;            Console.WriteLine("&lt;span style="color: #8b0000"&gt;订阅结束&lt;/span&gt;");&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnError(Exception error)&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NotImplementedException();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; OnNext(Magazine magazine)&lt;br/&gt;        {&lt;br/&gt;            Console.WriteLine("&lt;span style="color: #8b0000"&gt;{0}:新杂志来了!\r\n\t名称:{1}\t期号:{2}&lt;/span&gt;",m_Name, magazine.Title, magazine.Issue);&lt;br/&gt;        }&lt;br/&gt;    }    &lt;/div&gt;    &lt;br /&gt;    3.发送通知（提供程序）的类（报摊老板，这里假定这个老板很给力，垄断了报摊生意，全世界以后就他一个人卖报纸，不过他脾气也很怪异，随时都有可能不做生意）  &lt;/div&gt;  &lt;div&gt;    &lt;div&gt;      &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; TheSeller :IObservable&amp;lt;Magazine&amp;gt;&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; List&amp;lt;IObserver&amp;lt;Magazine&amp;gt;&amp;gt; m_Obervers = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;IObserver&amp;lt;Magazine&amp;gt;&amp;gt;();&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; TheSeller m_Instance = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; TheSeller();&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; TheSeller Instance&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; TheSeller.m_Instance; }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; TheSeller()&lt;br/&gt;        {&lt;br/&gt;        }&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Magazine GetCurrentMagazine()&lt;br/&gt;        {&lt;br/&gt;            var magazine = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Magazine("&lt;span style="color: #8b0000"&gt;测试杂志?&lt;/span&gt;", &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format("&lt;span style="color: #8b0000"&gt;第{0}期&lt;/span&gt;", IssueSimulator.GenerateIssue()));&lt;br/&gt;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (var observer &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; m_Obervers)&lt;br/&gt;            {&lt;br/&gt;                observer.OnNext(magazine);&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; magazine;&lt;br/&gt;        }&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IDisposable Subscribe(IObserver&amp;lt;Magazine&amp;gt; observer)&lt;br/&gt;        {&lt;br/&gt;            m_Obervers.Add(observer);&lt;br/&gt;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; observer &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; IDisposable;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; IsCrazy()&lt;br/&gt;        {&lt;br/&gt;            var result = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Random().Next(1, 10) == 5;&lt;br/&gt;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (result)&lt;br/&gt;            {&lt;br/&gt;                &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (var observer &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; m_Obervers)&lt;br/&gt;                {&lt;br/&gt;                    observer.OnCompleted();&lt;br/&gt;                }&lt;br/&gt;&lt;br/&gt;            }&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;&lt;br/&gt;        }&lt;br/&gt;    }    &lt;/div&gt;    &lt;br /&gt;4.其他辅助类型(IssueSimulator用生成模拟期号)    &lt;br /&gt;    &lt;div&gt;      &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; IssueSimulator&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; m_Issue = 1;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; GenerateIssue()&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; m_Issue++;&lt;br/&gt;        }&lt;br/&gt;    }    &lt;/div&gt;    &lt;br /&gt;5.调用代码&lt;/div&gt;  &lt;div&gt;    &lt;div&gt;      &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Program&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Main(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] args)&lt;br/&gt;        {&lt;br/&gt;            var customer1 = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Customer("&lt;span style="color: #8b0000"&gt;张三&lt;/span&gt;");&lt;br/&gt;            var customer2 = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Customer("&lt;span style="color: #8b0000"&gt;李四&lt;/span&gt;");&lt;br/&gt;&lt;br/&gt;            TheSeller.Instance.Subscribe(customer1);&lt;br/&gt;            TheSeller.Instance.Subscribe(customer2);&lt;br/&gt;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (!TheSeller.Instance.IsCrazy())&lt;br/&gt;            {&lt;br/&gt;                TheSeller.Instance.GetCurrentMagazine();&lt;br/&gt;                Thread.Sleep(2000);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;    }    &lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/1958317.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2011/02/19/1958317.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MythYsJh/archive/2010/12/30/1921663.html</id><title type="text">用FileSystemWatcher监听自定义配置文件</title><summary type="text">一、 问题描述 我经常会遇到这样的场景：系统中有些自定义的配置文件，为了提升性能，可能会对已解析的配置做缓存。这样造成的结果就是每次更改配置都不得不重启应用程序，配置才会生效。但有时又不希望应用重启，于是问题来了：怎样才能不重启应用就让配置生效？ 幸运的是，微软提供了FileSystemWatcher类来完成这个功能。下面就先来说说FileSystemWatcher。 二、 关于FileSystemWatcher FileSystemWatcher: 侦听文件系统更改通知，并在目录或目录中的文件发生更改时引发事件。 FileSystemWatcher有几个重要且常用的属性： 属性名称 </summary><published>2010-12-30T05:50:00Z</published><updated>2010-12-30T05:50:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2010/12/30/1921663.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2010/12/30/1921663.html"/><content type="html">&lt;div&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;span style="font-size: 14pt; "&gt;一、&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14pt; "&gt;问题描述&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:宋体;"&gt;我经常会遇到这样的场景：系统中有些自定义的配置文件，为了提升性能，可能会对已解析的配置做缓存。这样造成的结果就是每次更改配置都不得不重启应用程序，配置才会生效。但有时又不希望应用重启，于是问题来了：怎样才能不重启应用就让配置生效？&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:宋体;"&gt;幸运的是，微软提供了&lt;/span&gt;FileSystemWatcher&lt;span style="font-family:宋体;"&gt;类来完成这个功能。下面就先来说说&lt;/span&gt;FileSystemWatcher&lt;span style="font-family:宋体;"&gt;。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;span style="font-size: 14pt; "&gt;二、&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14pt; "&gt;关于&lt;/span&gt;&lt;span style="font-size: 14pt; "&gt;FileSystemWatcher&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;FileSystemWatcher: &lt;span&gt;&lt;span style="font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;; color:black"&gt;侦听文件系统更改通知，并在目录或目录中的文件发生更改时引发事件&lt;/span&gt;。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;FileSystemWatcher&lt;span style="font-family:宋体;"&gt;有几个重要且常用的属性：&lt;/span&gt;&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="0" style="margin-left:72.0pt;border-collapse:collapse;border:none;"&gt;  &lt;tbody&gt;&lt;tr&gt;   &lt;td width="168" valign="top" style="width:126.05pt;border:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p align="center" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:center"&gt;&lt;span style="font-family:宋体;"&gt;属性名称&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="422" valign="top" style="width:316.75pt;border:solid windowtext 1.0pt;   border-left:none;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p align="center" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:center"&gt;&lt;span style="font-family:宋体;"&gt;描述&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td width="168" valign="top" style="width:126.05pt;border:solid windowtext 1.0pt;   border-top:none;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:   &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;;color:black"&gt;Path&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="422" valign="top" style="width:316.75pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;获取或设置要监视的目录的路径&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td width="168" valign="top" style="width:126.05pt;border:solid windowtext 1.0pt;   border-top:none;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;Filter&lt;/p&gt;   &lt;/td&gt;   &lt;td width="422" valign="top" style="width:316.75pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;获取或设置筛选字符串，用于确定在目录中监视哪些文件&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td width="168" valign="top" style="width:126.05pt;border:solid windowtext 1.0pt;   border-top:none;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;NotifyFilter&lt;/p&gt;   &lt;/td&gt;   &lt;td width="422" valign="top" style="width:316.75pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;获取或设置要监视的更改类型&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td width="168" valign="top" style="width:126.05pt;border:solid windowtext 1.0pt;   border-top:none;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;EnableRaisingEvents&lt;/p&gt;   &lt;/td&gt;   &lt;td width="422" valign="top" style="width:316.75pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;获取或设置一个值，该值指示是否启用此组件&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Path&lt;span style="font-family:宋体;"&gt;和&lt;/span&gt;Filter&lt;span style="font-family:宋体;"&gt;用于指定监视的内容，&lt;/span&gt;NotifyFilter&lt;span style="font-family:宋体;"&gt;用于指定监视哪些变更，&lt;/span&gt;EnableRaisingEvents&lt;span style="font-family:宋体;"&gt;则用于指定监听器是否已启动。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;FileSystemWatcher&lt;span style="font-family:宋体;"&gt;还有几个重要的事件：&lt;/span&gt;&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="0" style="margin-left:72.0pt;border-collapse:collapse;border:none;"&gt;  &lt;tbody&gt;&lt;tr&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span style="font-family:宋体;"&gt;事件名称&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border:solid windowtext 1.0pt;   border-left:none;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span style="font-family:宋体;"&gt;描述&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border:solid windowtext 1.0pt;   border-top:none;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;Changed&lt;/p&gt;   &lt;/td&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;当更改指定&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;;   color:black"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:   &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;;color:black"&gt;Path&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;中的文件和目录时发生&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border:solid windowtext 1.0pt;   border-top:none;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;Created&lt;/p&gt;   &lt;/td&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;当在指定&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;;   color:black"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:   &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;;color:black"&gt;Path&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;中创建文件和目录时发生&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border:solid windowtext 1.0pt;   border-top:none;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;Deleted&lt;/p&gt;   &lt;/td&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;删除指定&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;;   color:black"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:   &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;;color:black"&gt;Path&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;中的文件或目录时发&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border:solid windowtext 1.0pt;   border-top:none;   padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;Renamed&lt;/p&gt;   &lt;/td&gt;   &lt;td width="295" valign="top" style="width:221.4pt;border-top:none;border-left:   none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt"&gt;   &lt;p&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;重命名指定&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:&amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;;   color:black"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:   &amp;quot;Segoe UI&amp;quot;,&amp;quot;sans-serif&amp;quot;;color:black"&gt;Path&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:10.0pt;font-family:宋体;Segoe UI&amp;quot;;Segoe UI&amp;quot;;Segoe UI&amp;quot;;   color:black"&gt;中的文件或目录时发&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:宋体;"&gt;在这个问题中，&lt;/span&gt;Changed&lt;span style="font-family:宋体;"&gt;事件就可以完成任务。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;span style="font-size: 14pt; "&gt;三、&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14pt; "&gt;解决方案&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:宋体;"&gt;在做维护工具时，我喜欢把&lt;/span&gt;sql&lt;span style="font-family:宋体;"&gt;放到配置文件：&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;span style="font-family:宋体;"&gt;如：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;xml&amp;nbsp;version="1.0"&amp;nbsp;encoding="utf-8"&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;sqls&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;sql&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="getData"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Select&amp;nbsp;*&amp;nbsp;from&amp;nbsp;table&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;]]&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;sql&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;sqls&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;/span&gt;我的sqlManager可能如下:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;SqlManager&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;XmlDocument&amp;nbsp;SqlDoc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;readonly&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ConfigPath&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;AppDomain.CurrentDomain.BaseDirectory&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\Sqls\\Sql.xml&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;SqlManager()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlDoc&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;XmlDocument();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlDoc.Load(ConfigPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;GetSql(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;nodes&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;SqlDoc.SelectNodes(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/sqls/sql&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(XmlNode&amp;nbsp;node&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;nodes)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(node.Attributes[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;].Value.Equals(name,&amp;nbsp;StringComparison.InvariantCultureIgnoreCase))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;node.InnerText;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;/span&gt;为了实现开篇的要求,我将SqlManager修改如下:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;SqlManager&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;XmlDocument&amp;nbsp;SqlDoc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;readonly&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ConfigPath&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;AppDomain.CurrentDomain.BaseDirectory&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\Sqls\\Sql.xml&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FileSystemWatcher&amp;nbsp;watcher;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;SqlManager()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlDoc&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;XmlDocument();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlDoc.Load(ConfigPath);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;watcher&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FileSystemWatcher(AppDomain.CurrentDomain.BaseDirectory&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\Sqls&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;*.*&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;watcher.NotifyFilter&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;NotifyFilters.LastWrite&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;NotifyFilters.Size&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;watcher.Changed&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(obj,&amp;nbsp;e)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlDoc.Load(ConfigPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;GetSql(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;nodes&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;SqlDoc.SelectNodes(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/sqls/sql&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(XmlNode&amp;nbsp;node&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;nodes)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(node.Attributes[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;].Value.Equals(name,&amp;nbsp;StringComparison.InvariantCultureIgnoreCase))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;node.InnerText;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;/span&gt;这样以后每次修改sql语句就不用再重启应用了。&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt; "&gt;&lt;strong&gt;四、小结&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;/span&gt;&amp;nbsp;本篇大致介绍了用FileSystemWatcher监听自定义配置文件，在配置文件发生更改自动应用最新配置的问题。关于FileSystemWatcher更详细的介绍请参见MSDN。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/1921663.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2010/12/30/1921663.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MythYsJh/archive/2010/10/28/1863701.html</id><title type="text">深入浅出设计模式读书笔记系列</title><summary type="text">设计模式读书笔记系列索引</summary><published>2010-10-28T09:14:00Z</published><updated>2010-10-28T09:14:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2010/10/28/1863701.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2010/10/28/1863701.html"/><content type="html">&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 12.5px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl22_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2009/08/03/1537212.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记&amp;#8212;第一章&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl20_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2009/08/17/1548495.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记&amp;#8212;第二章（1）&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl18_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2009/08/22/1552006.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记&amp;#8212;第二章(2)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl16_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2009/08/28/1555493.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记&amp;#8212;第三章&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl14_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2009/09/27/1574980.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记第四章(1)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl12_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2009/10/29/1592579.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记-第五章（1）&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl10_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2009/10/31/1593367.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记-第五章（2）&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl08_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2010/03/05/1677969.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记&amp;#8212;Template Method&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl06_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2010/03/15/Iterator.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记&amp;#8212;Iterator&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl04_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2010/03/19/composite.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记&amp;#8212;Composite&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl02_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2010/03/29/state.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记&amp;#8212;状态模式&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 23px; font-size: 10.8333px; font-weight: bold; "&gt;&lt;a id="CategoryEntryList1_EntryStoryList_Entries_ctl00_TitleUrl" class="entrylistItemTitle" href="http://www.cnblogs.com/MythYsJh/archive/2010/04/14/1711843.html" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #0066cc; text-decoration: none; "&gt;&lt;span style="font-size: 10pt; "&gt;深入浅出设计模式读书笔记&amp;#8212;代理模式(1)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000; "&gt;以上为在读&lt;font class="Apple-style-span" face="verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 23px;"&gt;深入浅出设计模式这本书时所记录的笔记和心得，方便管理查阅。&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/1863701.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2010/10/28/1863701.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MythYsJh/archive/2010/09/27/1836903.html</id><title type="text">JQuery UI DatePicker默认z-index为1的解决办法</title><summary type="text">用到JQuery UI的DatePicker时，发现如果页面有其他z-index比较大的控件，datepicker就会被遮住而不能操作。在网上也没能找到有效的解决办法，下面我提供一种看似投机的办法：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--&gt;$("...</summary><published>2010-09-27T07:33:00Z</published><updated>2010-09-27T07:33:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2010/09/27/1836903.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2010/09/27/1836903.html"/><content type="html">&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;/span&gt;用到JQuery UI的DatePicker时，发现如果页面有其他z-index比较大的控件，datepicker就会被遮住而不能操作。在网上也没能找到有效的解决办法，下面我提供一种看似投机的办法：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('2bfeab5d-7c2d-4a40-abc5-94343e3e5a90')"&gt;&lt;div id="cnblogs_code_open_2bfeab5d-7c2d-4a40-abc5-94343e3e5a90"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;#txtFillInDate&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;).datepicker({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;monthNames:&amp;nbsp;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;一月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;二月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;三月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;四月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;五月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;六月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;七月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;八月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;九月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;十月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;十一月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;十二月&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dayNamesMin:&amp;nbsp;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;日&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;一&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;二&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;三&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;四&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;五&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;六&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;],&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dateFormat:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;yy-mm-dd&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;beforeShow:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setTimeout(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;#ui-datepicker-div&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;).css(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;z-index&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;15&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; 关键就在于&lt;span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; "&gt;beforeShow的使用上，大家一看就明白，这里就不多说了，希望能给您带来帮助。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/1836903.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2010/09/27/1836903.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MythYsJh/archive/2010/08/26/1809512.html</id><title type="text">如何将按钮点击后禁用</title><summary type="text">分享按钮点击后禁用的几种方式</summary><published>2010-08-26T13:35:00Z</published><updated>2010-08-26T13:35:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/26/1809512.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/26/1809512.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;有时候为了不让用户连续的点击某按钮，我们会选择将其在点击后禁用。&lt;/p&gt;    &lt;p&gt;一、让按钮在点击后用脚本使其禁用：&lt;/p&gt;    &amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DisableButton.WebForm1" %&amp;gt;&lt;br/&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br/&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br/&gt;&amp;lt;head runat="server"&amp;gt;&lt;br/&gt;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br/&gt;&amp;lt;script type="text/javascript" src="Scripts/jquery-1.4.1.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br/&gt;function enableButton(flag) {&lt;br/&gt;    $("#btnTest").attr("disabled", flag? "" : "disabled");&lt;br/&gt;}&lt;br/&gt;$(document).ready(&lt;br/&gt;    function () {&lt;br/&gt;        $("#btnTest").click(&lt;br/&gt;            function () {&lt;br/&gt;                enableButton( false );//点击后禁用&lt;br/&gt;                            }&lt;br/&gt;        );&lt;br/&gt;     }&lt;br/&gt;);&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&amp;lt;/head&amp;gt;&lt;br/&gt;&amp;lt;body&amp;gt;&lt;br/&gt;&amp;lt;form id="form1" runat="server"&amp;gt;&lt;br/&gt;&amp;lt;div&amp;gt;&lt;br/&gt;     &amp;lt;asp:Button ID="btnTest" Text="点击后禁用" runat="server" OnClick="Test" /&amp;gt;&lt;br/&gt;&amp;lt;/div&amp;gt;&lt;br/&gt;&amp;lt;/form&amp;gt;&lt;br/&gt;&amp;lt;/body&amp;gt;&lt;br/&gt;&amp;lt;/html&amp;gt;然而事实很遗憾的告诉我们这种方式行不通：页面根本不会回发。于是，我们不得不寻找其他方式。   二、让回发的按钮退居二线:  &amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DisableButton.WebForm1" %&amp;gt;&lt;br/&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br/&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br/&gt;&amp;lt;head runat="server"&amp;gt;&lt;br/&gt;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br/&gt;&amp;lt;script type="text/javascript" src="Scripts/jquery-1.4.1.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br/&gt;function enableButton(flag) {&lt;br/&gt;      $("#btnTest").attr("disabled", flag? "" : "disabled");&lt;br/&gt;}&lt;br/&gt;$(document).ready(&lt;br/&gt;    function () {&lt;br/&gt;        $("#btnTest").click(&lt;br/&gt;           function () {&lt;br/&gt;               enableButton(false);&lt;br/&gt;               $("#btnTest2").click();//禁用掉自身并调用真正触发回发的按钮的click事件&lt;br/&gt;              }&lt;br/&gt;         );&lt;br/&gt;    }&lt;br/&gt;);&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&amp;lt;/head&amp;gt;&lt;br/&gt;&amp;lt;body&amp;gt;&lt;br/&gt;&amp;lt;form id="form1" runat="server"&amp;gt;&lt;br/&gt;&amp;lt;div&amp;gt;&lt;br/&gt;&amp;lt;input type="button" value="点击后禁用" id="btnTest" /&amp;gt;&lt;br/&gt;&amp;lt;asp:Button ID="btnTest2" Text="点击后禁用" runat="server" OnClick="Test" style="display:none"/&amp;gt;&lt;br/&gt;&amp;lt;/div&amp;gt;&lt;br/&gt;&amp;lt;/form&amp;gt;&lt;br/&gt;&amp;lt;/body&amp;gt;&lt;br/&gt;&amp;lt;/html&amp;gt;&lt;/blockquote&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;这样一来我们的目的达到了。最后再介绍一种方式：三、利用setTimeout实现  &amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DisableButton.WebForm1" %&amp;gt;&lt;br/&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br/&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br/&gt;&amp;lt;head runat="server"&amp;gt;&lt;br/&gt;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br/&gt;&amp;lt;script type="text/javascript" src="Scripts/jquery-1.4.1.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br/&gt;function enableButton(flag) {&lt;br/&gt;      $("#btnTest").attr("disabled", flag? "" : "disabled");&lt;br/&gt;}&lt;br/&gt;$(document).ready(&lt;br/&gt;    function () {&lt;br/&gt;        $("#btnTest").click(&lt;br/&gt;            function () {&lt;br/&gt;                setTimeout(function () {&lt;br/&gt;                enableButton(false);&lt;br/&gt;            },&lt;br/&gt;            50);&lt;br/&gt;        }&lt;br/&gt;        );&lt;br/&gt;    }&lt;br/&gt;);&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;br/&gt;&amp;lt;/head&amp;gt;&lt;br/&gt;&amp;lt;body&amp;gt;&lt;br/&gt;&amp;lt;form id="form1" runat="server"&amp;gt;&lt;br/&gt;&amp;lt;div&amp;gt;&lt;br/&gt;&amp;lt;asp:Button ID="btnTest" Text="点击后禁用" runat="server" OnClick="Test"/&amp;gt;&lt;br/&gt;&amp;lt;/div&amp;gt;&lt;br/&gt;&amp;lt;/form&amp;gt;&lt;br/&gt;&amp;lt;/body&amp;gt;&lt;br/&gt;&amp;lt;/html&amp;gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;这样不用引入辅助控件我们也实现了需求。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;注：为了更好的观察试验效果，可以在按钮的Click时间处理函数中Sleep几秒。&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/1809512.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2010/08/26/1809512.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MythYsJh/archive/2010/08/25/1808543.html</id><title type="text">排序算法之快速排序</title><summary type="text">快速排序的一种实现</summary><published>2010-08-25T15:10:00Z</published><updated>2010-08-25T15:10:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/25/1808543.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/25/1808543.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;&amp;nbsp;&amp;nbsp; 快速排序实现:&lt;/p&gt;    namespace QuickSort&lt;br/&gt;{&lt;br/&gt;    class QuickSort&lt;br/&gt;    {&lt;br/&gt;        public  static void Sort(int[] array)&lt;br/&gt;        {&lt;br/&gt;            DoSort(array,0, array.Length-1);&lt;br/&gt;        }&lt;br/&gt;        private static void DoSort( int[] array, int start, int end)&lt;br/&gt;        {&lt;br/&gt;            if( start &amp;lt; end)&lt;br/&gt;            {&lt;br/&gt;                int temp = Partition(array, start, end);&lt;br/&gt;&lt;br/&gt;                DoSort(array, start, temp-1);&lt;br/&gt;                DoSort(array, temp + 1, end);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        private static int Partition(int[] array,int start, int end)&lt;br/&gt;        {&lt;br/&gt;            int index = start - 1;&lt;br/&gt;&lt;br/&gt;            for( var i=start; i&amp;lt; end; i++)&lt;br/&gt;            {&lt;br/&gt;                if( array[i] &amp;lt; array[end])&lt;br/&gt;                {&lt;br/&gt;                    index++;&lt;br/&gt;                    Swap(array, index, i);&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            Swap(array, index +1, end);&lt;br/&gt;&lt;br/&gt;            return index + 1;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        private static void Swap(int[] array,  int index1, int index2)&lt;br/&gt;        {&lt;br/&gt;            var temp = array[index1];&lt;br/&gt;            array[index1] = array[index2];&lt;br/&gt;            array[index2] = temp;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}  &lt;p&gt;以上即为快速排序的代码，这里有两个重要的方法：&lt;/p&gt;  &lt;ol&gt;    &lt;li&gt;Partition:该方法是以数组的某个元素为参考元素（轴元素或主元素），将数组划分成三个区域： &lt;/li&gt;  &lt;/ol&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 【&amp;lt;=参考元素】【参考元素】【&amp;gt;=参考元素】&lt;/p&gt;  &lt;p&gt;2.&amp;nbsp;&amp;nbsp; DoSort:该方法会调用Partition将数组分区，并在新产生的子数组上递归调用最终达到有序的目的。&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;  &lt;p&gt;&amp;nbsp; 上面给出的代码是以数组最后一个元素作为参考元素，这仅是参考元素选取的方式之一。我们也可以随即选取数组的元素或者数组中间的元素作为参考元素。事实上参考元素的选取对快速排序的性能有很大影响。如果每次选取的参考元素能将数组分成相对均衡的区域，快速排序将成为最快的排序算法；但在另一种极端情形下，每次分成的数组都是1和n-1的关系，快速排序又会变的很慢。具体的性能数据后面再来讨论研究。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;  &lt;p&gt;&lt;font color="#111111"&gt;参考书籍：算法导论&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/1808543.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2010/08/25/1808543.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MythYsJh/archive/2010/08/17/1801904.html</id><title type="text">Advanced .Net Remoting读书笔记(1)—Introduction to Remoting</title><summary type="text">对Remoting的大致介绍</summary><published>2010-08-17T14:44:00Z</published><updated>2010-08-17T14:44:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/17/1801904.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/17/1801904.html"/><content type="html">&lt;p&gt;&lt;strong&gt;Remoting是什么？&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;简言之,remoting就是程序或组件跨越特定边界进行交互的过程。这里的边界一般指计算机与计算机之间，进程与进程之间。在.Net下应该还要包括应用程序域与应用程序域之间。&lt;/p&gt;    &lt;p&gt;Remoting的实现大致分两种形式：remote objects and mobile objects。&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;remote objects ：每次只会有一个对象的引用被发送至客户端，在这个引用上调用方法最终会被传送回服务器一端的真实对象并在该对象上执行。 &lt;/li&gt;      &lt;li&gt;mobile objects：这种对象会被序列化并跨越边界真实的被发送到客户端。当在客户端调用方法时，并不会想remote objects那样被传回服务器端，方法会在客户端立即执行。亦即客户端会拥有服务器端对象的一份拷贝，此拷贝与服务器端对象没有分别。 &lt;/li&gt;   &lt;/ol&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;.Net Remoting的使用场景&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;ol&gt;     &lt;li&gt;&lt;font color="#111111"&gt;让业务逻辑更集中：将业务逻辑放到几台核心的服务器上，其他服务器或应用程序通过remoting的方式访问这些业务逻辑。当业务逻辑发生变化时，就只需更新几台核心服务器。如果不这样做，就必须将程序分发到很多太终端上去。&lt;/font&gt; &lt;/li&gt;      &lt;li&gt;层与层之间的物理分隔 &lt;/li&gt;      &lt;li&gt;访问其他平台的应用 &lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Remoting的演化&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;主要的remoting frameworks：DCE/RPC&lt;font color="#111111"&gt;&lt;strong&gt;,&lt;/strong&gt;CORBA,DCOM,MTS/COM+,Java RMI,Java EJB,Web Services/SOAP/XML-RPC,.NET Remoting。&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;参考书籍:《Advanced .Net Remoting》&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/1801904.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2010/08/17/1801904.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MythYsJh/archive/2010/08/15/1800201.html</id><title type="text">排序算法之堆排序</title><summary type="text">堆排序原理及实现</summary><published>2010-08-15T13:05:00Z</published><updated>2010-08-15T13:05:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/15/1800201.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/15/1800201.html"/><content type="html">&lt;p&gt;&lt;font size="4"&gt;一、基本概念&lt;/font&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;font color="#111111"&gt;&lt;strong&gt;堆&lt;/strong&gt;：这里是指一种数据结构，而不是我们在C#中提到的用于存储引用类型对象的地方。它可以被当成一棵&lt;a href="http://baike.baidu.com/view/88806.htm"&gt;完全二叉树&lt;/a&gt;。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/binaryTree_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="binaryTree" border="0" alt="binaryTree" src="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/binaryTree_thumb_1.png" width="244" height="178" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为了将堆用数组来存放，这里对每个节点标上顺序。事实上，我们可以用简单的计算公式得出父节点，左孩子，右孩子的索引：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; parent(i) = &lt;a href="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/clip_image002%5B4%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[4]" border="0" alt="clip_image002[4]" src="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/clip_image002%5B4%5D_thumb.gif" width="39" height="24" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; left(i) = 2i&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; right(i)=2i + 1&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;strong&gt;最大堆和最小堆:&lt;/strong&gt; 最大堆是指所有父节点的值都大于其孩子节点的堆，即满足以下公式：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A[parent[i]]&lt;a href="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/clip_image002%5B6%5D.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[6]" border="0" alt="clip_image002[6]" src="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/clip_image002%5B6%5D_thumb.gif" width="13" height="16" /&gt;&lt;/a&gt;A[i](A是指存放该堆的数组)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最小堆相反。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最大堆和最小堆是堆排序的关键，可知最大堆的根节点是堆中最大的节点。因此只要我们构造出最大(小)堆，最大(小)的元素也就得到了，然后再对剩下的元素继续构造最大(小)堆，就可以取出第二大(小)的元素，依此类推，直到排序完成。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;二、构造最大(小)堆&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;font color="#111111" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们已经得知构造最大(小)堆是堆排序的关键，下面就来看看如何构造最大堆。&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 万事开头难，首先来看一种特殊的情形吧：堆的根节点的左子树和右子树都已经是最大堆了，然而根节点却比孩子节点小，当然，这个堆不满足最大堆的定义。为了&amp;#9321;这个堆成为最大堆，我们可以按如下步骤操作：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; （1）将根节点与左右孩子中最大的交换&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; （2）交换之后可能会面临左或右子树不是最大堆的问题，但由于整个左(右)子树一开始就是最大堆，问题又回到了最开始的状态，因此只要如此反复即可得到最大堆。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 对于上面的特殊堆已经找到了解决办法，但对于一般意义上的堆呢？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们可以选择自底向上来构造：叶子节点是特殊的最大堆，举个例子有叶子节点a,b,它们的父节点是p;a,b肯定已经是最大堆了，这是要保证a,b,p组成的子树是最大堆。这个堆很眼熟是不是？没错，它就是前面提到的特殊的堆。在a,b,p组成的子树变成最大堆后，我们又可以类似的使该子树，该子树的父节点，以及同胞子树（或节点）组成的新子树成为最大堆，如此类推，最终使堆变为最大堆。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 对于求解最小堆与此类似。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;三、实现&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;完整代码:&lt;/font&gt;&lt;/p&gt;namespace HeapSort&lt;br/&gt;{&lt;br/&gt;using System;&lt;br/&gt;class Program&lt;br/&gt;{&lt;br/&gt;static int heapSize =0;&lt;br/&gt;static void Main(string[] args)&lt;br/&gt;{&lt;br/&gt;var heap = new[] { -1, 10, 5, 12, 77, 54, 7, 34, 23, 11 };//为了方便，索引0处不存放元素（或存放无用元素）&lt;br/&gt;heapSize = heap.Length - 1;&lt;br/&gt;BuildMaxHeap(heap);&lt;br/&gt;for (var i = heap.Length - 1; i &amp;gt;= 2; i--)&lt;br/&gt;{&lt;br/&gt;//1.每次在构建好最大堆后，将第一个元素和最后一个元素交换；&lt;br/&gt;//2.第一次以索引1到length-1出的元素组成新的堆，第二次1到length-2，直到剩下最后两个元素组成堆&lt;br/&gt;//3.每次新组成的堆除了根节点其他节点都能保持最大堆的特性，因此只要DoBuildMaxHeap(heap, 1)就可以得到新的最大堆&lt;br/&gt;Swap(heap, 1, i);&lt;br/&gt;heapSize--;&lt;br/&gt;MaxHeapfy(heap, 1);&lt;br/&gt;}&lt;br/&gt;foreach (var i in heap)&lt;br/&gt;Console.Write(i + " ");&lt;br/&gt;}&lt;br/&gt;static void BuildMaxHeap(int[] heap)&lt;br/&gt;{&lt;br/&gt;for (var i = (heap.Length - 1) / 2; i &amp;gt;= 1; i--)&lt;br/&gt;{&lt;br/&gt;MaxHeapfy(heap, i);&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;static void MaxHeapfy(int[] heap, int index)&lt;br/&gt;{&lt;br/&gt;var largerItemIndex = index;&lt;br/&gt;var leftChildIndex = index &amp;lt;&amp;lt; 1;&lt;br/&gt;var rightChildIndex = (index&amp;lt;&amp;lt;1) + 1;&lt;br/&gt;if (leftChildIndex &amp;lt;= heapSize &amp;amp;&amp;amp; heap[leftChildIndex] &amp;gt; heap[index])&lt;br/&gt;{&lt;br/&gt;largerItemIndex = leftChildIndex;&lt;br/&gt;}&lt;br/&gt;if (rightChildIndex &amp;lt;= heapSize &amp;amp;&amp;amp; heap[rightChildIndex] &amp;gt; heap[largerItemIndex])&lt;br/&gt;{&lt;br/&gt;largerItemIndex = rightChildIndex;&lt;br/&gt;}&lt;br/&gt;if( index != largerItemIndex)&lt;br/&gt;{&lt;br/&gt;Swap(heap, index, largerItemIndex);&lt;br/&gt;MaxHeapfy(heap, largerItemIndex);&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;static void Swap(int[] heap, int index1, int index2)&lt;br/&gt;{&lt;br/&gt;var temp = heap[index1];&lt;br/&gt;heap[index1] = heap[index2];&lt;br/&gt;heap[index2] = temp;&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;}&lt;p&gt;1.MaxHeapfy:该方法的前提是index处节点的左右子树已经是最大堆，最终的目的是使以index处节点为根的堆成为最大堆&lt;/p&gt;&lt;p&gt;2.BuildMaxHeap：该方法涉及一个事实：如果一个对含n个元素，那么从&lt;a href="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/clip_image002_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/clip_image002_thumb.gif" width="63" height="24" /&gt;&lt;/a&gt;开始的元素（假设节点下表从1开始）就一定是叶子节点（这一点可以用反证法证明，假设&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[4]" border="0" alt="clip_image002[4]" src="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/clip_image002%5B4%5D_thumb_1.gif" width="63" height="24" /&gt;处节点不是叶子节点，那么该节点必包含子节点，从而可以得出其左孩子的索引2 *(&lt;a href="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/clip_image002%5B6%5D_1.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002[6]" border="0" alt="clip_image002[6]" src="http://images.cnblogs.com/cnblogs_com/MythYsJh/WindowsLiveWriter/e2e4064cd9b0_90AF/clip_image002%5B6%5D_thumb_1.gif" width="63" height="24" /&gt;&lt;/a&gt;) &amp;gt; n的结论，显然这是错误的）。在这个前提下，该方法至底向上通过MaxHeapfy将堆构建成最大堆。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;参考资料：算法导论&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/1800201.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2010/08/15/1800201.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MythYsJh/archive/2010/08/11/1797638.html</id><title type="text">dynamic和匿名类型结合</title><summary type="text">经常使用js的朋友会发现，我们经常需要返回一些‘临时’的类型的实例。举个例子，当我们在定位一个元素时，我们的方法的结束处可能会是这样：[代码] 得益于js的动态特性，我们不用再去定义一个包含top和left属性的类型。然而在C#中，我们却不得不去定义这样一个类型，尽管这个类型可能就使用那么一次。 不过，在C# 4.0里，ms为我们引入了dynamic，这决定了我们可以如同使...</summary><published>2010-08-11T13:29:00Z</published><updated>2010-08-11T13:29:00Z</updated><author><name>FrogTan</name><uri>http://www.cnblogs.com/MythYsJh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/11/1797638.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MythYsJh/archive/2010/08/11/1797638.html"/><content type="html">&lt;p&gt;经常使用js的朋友会发现，我们经常需要返回一些&amp;#8216;临时&amp;#8217;的类型的实例。举个例子，当我们在定位一个元素时，我们的方法的结束处可能会是这样：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;getOffset(obj)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;offset&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;object();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;offset.top&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;top;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;offset.left&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;left;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;offset;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 得益于js的动态特性，我们不用再去定义一个包含top和left属性的类型。然而在C#中，我们却不得不去定义这样一个类型，尽管这个类型可能就使用那么一次。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 不过，在C# 4.0里，ms为我们引入了dynamic，这决定了我们可以如同使用js一般来使用C#。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 比如上面这个问题，我们可以使用dynamic和匿名类型来实现:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;dynamic&amp;nbsp;GetOffset()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dynamic&amp;nbsp;offset&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;{Top&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;top,&amp;nbsp;Left&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;left};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;offste;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这样一来是不是方便了不少？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当然，dynamic引入的问题就是如果使用了dynamic类型不包含的属性在编译时并不会被发现，而在运行时则会以异常的形式表现出来。这也是让我觉得在使用时畏首畏尾的缘由。不过，个人认为C#不适宜过多的采用动态语言的编程方式。而一旦用了则一定要做好注释，比如上面的方法只要对返回值多详细的说明我相信就不会出现被人无用的情形。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/MythYsJh/aggbug/1797638.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MythYsJh/archive/2010/08/11/1797638.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
