﻿<?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>IT博客-飞得更高</title><link>http://www.cnitblog.com/qiuwuqiu/</link><description>己所不欲，勿施于人
&lt;form action="www.baidu.com"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;input type="button" onClick="shake(3)" value="我要发泄！！！"&gt;

&lt;/form&gt;
&lt;div id="ring" class="ringstyle"&gt;
	&lt;p&gt;&lt;font color="red"&gt;）&lt;/font&gt;&lt;/p&gt;
	&lt;/div&gt;&lt;div id="redirection" class="explain"&gt;
&lt;/div&gt; 
&lt;style&gt;
.ringstyle {
position:absolute;
visibility:visible;
top:-50px;
font-size:5pt;
font-family:Verdana;
color:FF0000
}
.explain {
position:absolute;
top:80px; 
left:40px; 
width:300px; 
color:000000;
text-align:center;
font-size:20pt;
font-family:Times;
}
&lt;/style&gt;
&lt;script LANGUAGE="JavaScript"&gt;


var x,y
var timer
var i_fontsize=0
var step=0
var thisx,thisy
function handlerMM(e){
	 // x = window.screen.width/2;
	  //y = window.screen.height/2;
	x = (document.layers) ? e.pageX : event.clientX
	y = (document.layers) ? e.pageY : event.clientY
}
function ringup() {
	if (document.all) {
		thisx = x
		thisy = y
		ringup2()
	}
}
function ringup2() {
	if (i_fontsize &lt;= 300) { 
		document.all.ring.style.fontSize=i_fontsize
		document.all.ring.style.color="rgb(255,"+Math.floor(i_fontsize/6)+","+Math.floor(i_fontsize/6)+")"
		document.all.ring.style.posLeft = thisx - (Math.floor(i_fontsize/4))
		document.all.ring.style.posTop = thisy-(Math.floor(i_fontsize/2))
		step += 3
		i_fontsize += step
		timer=setTimeout("ringup(2)",50)
	}
	else {
		clearTimeout(timer)
		i_fontsize = 0
		step = 0
		document.all.ring.style.posTop=-8000
	}
	
}
document.onmousemove = handlerMM;

function shake(n) 
{
  ringup();
  if (window.moveBy) 
  {
    for (i = 3; i &gt; 0; i--) 
    {
	  event.keyDown = 20
      for (j = n; j &gt; 0; j--) 
      {
        window.moveBy(0,i);
        window.moveBy(i,0);
        window.moveBy(0,-i);
        window.moveBy(-i,0);
      }
    }
	
  }
}

&lt;/script&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 04 May 2026 07:59:40 GMT</lastBuildDate><pubDate>Mon, 04 May 2026 07:59:40 GMT</pubDate><ttl>60</ttl><item><title>【转载】Visual Studio：针对 Java 开发人员的 C# 编程语言</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24283.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Mon, 19 Mar 2007 07:51:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24283.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24283.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24283.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24283.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Visual Studio：针对 Java 开发人员的 C# 编程语言						发布日期： 7/23/2004 | 更新日期： 7/23/2004						本文讨论 Java 和 C# 之间的异同点，目的在于当迁移到 .NET 时，让 Java 开发人员掌握所涉及的一些知识。Java 和 C# 之间的主要相似点是：																						...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24283.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-19 15:51 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转载】Visual C# .NET 入门</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24282.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Mon, 19 Mar 2007 07:41:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24282.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24282.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24282.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24282.html</trackback:ping><description><![CDATA[
		<h1>Visual C# .NET 入门</h1>
		<div class="date">发布日期： 6/28/2004<span class="datePipe"> | </span>更新日期： 6/28/2004</div>
		<div class="overview">
				<p>Microsoft Corporation</p>
				<p>适用于：Microsoft Visual C# .NET</p>
				<p>
						<b>摘要</b>：Visual C# .NET 是功能强大的编程语言 Visual Studio 套件的最新成员。Visual C# .NET 入门指南通过实现一个简单的 QuickSort 算法，带您领略如何构建 Visual C# .NET 项目。</p>
				<p>下载 <a href="http://download.microsoft.com/download/f/f/8/ff8c8040-d1a7-4402-90df-5d1aaa7d37af/Quicksort_Visual_CSharp_.NET.exe" target="_blank">Quicksort_Visual_CSharp_.NET.exe</a>。</p>
		</div>
		<center>
				<img title="" height="6" alt="*" src="http://img.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif" width="30" border="0" />
		</center>
		<div style="HEIGHT: 18px">
		</div>
		<h5 style="PADDING-TOP: 2px">本页内容</h5>
		<table style="MARGIN-TOP: 7px; MARGIN-BOTTOM: 12px" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EBC">
												<img height="9" alt="简介" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EBC">简介</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EKC">
												<img height="9" alt="步骤 1. 开始项目" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EKC">步骤 1. 开始项目</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#E3D">
												<img height="9" alt="步骤 2. Hello, World!" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#E3D">步骤 2. Hello, World!</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EEG">
												<img height="9" alt="步骤 3. 程序结构" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EEG">步骤 3. 程序结构</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EIAAC">
												<img height="9" alt="步骤 4. 控制台输入" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EIAAC">步骤 4. 控制台输入</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EFBAC">
												<img height="9" alt="步骤 5. 使用数组" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EFBAC">步骤 5. 使用数组</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EKCAC">
												<img height="9" alt="步骤 6. 文件输入/输出" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EKCAC">步骤 6. 文件输入/输出</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EAEAC">
												<img height="9" alt="步骤 7. 创建函数" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EAEAC">步骤 7. 创建函数</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EVFAC">
												<img height="9" alt="步骤 8. 使用调试器" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#EVFAC">步骤 8. 使用调试器</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#E2IAC">
												<img height="9" alt="小结" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#E2IAC">小结</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#E2JAC">
												<img height="9" alt="补遗：QuickSort C# .NET 的源代码" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#E2JAC">补遗：QuickSort C# .NET 的源代码</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#E6JAC">
												<img height="9" alt="补遗：关于 QuickSort C# .NET" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#E6JAC">补遗：关于 QuickSort C# .NET</a>
								</td>
						</tr>
				</tbody>
		</table>
		<a name="EBC">
		</a>
		<h2>简介</h2>
		<p>Visual C# .NET 是 Visual Studio 系列中的最新成员。这种新语言基于 C/C++，但它深化了更容易地使用面向组件编程的发展方向。C/C++ 程序员应该非常熟悉它的语法。</p>
		<p>下面的示例应用程序示范了如何构建一个简单的实现 QuickSort 算法的 C# 项目。它包括了 C# 程序的基本组成部分：读/写控制台和文件、创建函数和使用基本数组。</p>
		<p>这些入门指南并不打算涵盖该编程语言的所有方面。它们只是您探索这种语言的一个起点。我们鼓励您按照本教程的说明执行，因为它包括了 QuickSort 应用程序的各个不同部分。您还可以获得完整的源代码和项目文件。</p>
		<p>
				<b>建议的要求</b>
		</p>
		<p>编译此示例应用程序需要 Visual Studio.NET（测试版 2 或更高版本）。关于 C/C++ 的知识是有帮助的但不是必需的。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="EKC">
		</a>
		<h2>步骤 1. 开始项目</h2>
		<p>Visual Studio 中的开发工作以解决方案的形式进行组织，每个解决方案包含一个或多个项目。在本教程中，我们创建的解决方案包含一个 C# 项目。</p>
		<h3>创建一个新项目</h3>
		<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>1.</p>
								</td>
								<td>
										<p>在 Visual Studio .NET 环境中，从菜单中选择 <b>File | New | Project</b>。 </p>
										<div style="WIDTH: 376px">
												<img height="100" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-01.gif" width="376" border="0" />
												<br />
												<p class="figureCaption">
												</p>
												<div class="figureRule">
												</div>
										</div>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>2.</p>
								</td>
								<td>
										<p>在左侧选择 <b>Visual C#</b><b>Projects</b>，然后在右侧选择 <b>Console Application</b>。 </p>
										<div style="WIDTH: 525px">
												<img height="114" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-02.gif" width="525" border="0" />
												<br />
												<p class="figureCaption">
												</p>
												<div class="figureRule">
												</div>
										</div>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>3.</p>
								</td>
								<td>
										<p>指定项目的名称，然后输入创建项目的位置。Visual Studio 会自动创建项目目录。 </p>
										<div style="WIDTH: 421px">
												<img height="56" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-03.gif" width="421" border="0" />
												<br />
												<p class="figureCaption">
												</p>
												<div class="figureRule">
												</div>
										</div>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>4.</p>
								</td>
								<td>
										<p>单击 OK，那么现在就正式开始了！ </p>
								</td>
						</tr>
				</tbody>
		</table>
		<h3>Visual C# 解决方案</h3>
		<p>Visual Studio.NET 已经创建了含有一个简单 Visual C# 项目的解决方案。该项目包含两个文件：assemblyinfo.cs 和 class1.cs。</p>
		<p>接下来的几步骤将讨论这些不同的文件以及如何编译该项目。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="E3D">
		</a>
		<h2>步骤 2. Hello, World!</h2>
		<p>很遗憾，但我们仍然无法抵御这种诱惑……我们还是不得不完成一个基于 C# 的经典"Hello, World!"应用程序，这个应用程序最初是用 C 语言编写的。</p>
		<h3>修改源代码</h3>
		<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>1.</p>
								</td>
								<td>
										<p>在 Solution Explorer 中双击文件"class1.cs"。可以通过"View"菜单来显示 Solution Explorer。 </p>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>2.</p>
								</td>
								<td>
										<p>更改预生成的模板 (class1.cs)，如下面以斜体突出显示的 代码所示。 </p>
										<pre class="codeSample">using System;
namespace quicksort
{
    /// 
    /// Summary description for Class1.
    /// 
    class Class1
    {
        static void Main(string[] args)
        {
            //
            // TODO: Add code to start application here
            //
            Console.WriteLine ("Hello, C#.NET World!");
        }
    }
}
</pre>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>3.</p>
								</td>
								<td>
										<p>注意，当您键入代码时，Visual Studio 将为您提示类和函数的名称（因为 .NET 框架发布了这种类型信息）。 </p>
										<div style="WIDTH: 500px">
												<img height="100" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-04.gif" width="500" border="0" />
												<br />
												<p class="figureCaption">
												</p>
												<div class="figureRule">
												</div>
										</div>
										<div style="WIDTH: 400px">
												<img height="61" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-05.gif" width="400" border="0" />
												<br />
												<p class="figureCaption">
												</p>
												<div class="figureRule">
												</div>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<h3>编译应用程序</h3>
		<table class="numberedList" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>1.</p>
								</td>
								<td>
										<p>既然您已经完成了修改，就可以通过在 Build 菜单中简单地选择 Build 来编译 Visual C# 项目。 </p>
										<div style="WIDTH: 380px">
												<img height="69" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-06.gif" width="380" border="0" />
												<br />
												<p class="figureCaption">
												</p>
												<div class="figureRule">
												</div>
										</div>
								</td>
						</tr>
						<tr valign="top">
								<td class="listNumber" nowrap="" align="right">
										<p>2.</p>
								</td>
								<td>
										<p>来自 C# 编译器的错误和消息会在 Output 窗口中显示。如果没有错误，则可以通过单击 Debug 菜单下的 Start without Debugging 来运行 Hello World 应用程序。 </p>
										<div style="WIDTH: 431px">
												<img height="117" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-07.gif" width="431" border="0" />
												<br />
												<p class="figureCaption">
												</p>
												<div class="figureRule">
												</div>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<h3>程序输出</h3>
		<p>在 Visual C# 中运行 Hello World 示例应用程序时，输出结果的屏幕截图如下：</p>
		<div style="WIDTH: 369px">
				<img height="93" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-08.gif" width="369" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<h3>理解更改</h3>
		<p>
				<b>System.Console </b>类的 <b>WriteLine() </b>函数打印传递给它的字符串，其后紧跟一行新的字符。此函数可以接受许多其他数据类型（包括整型和浮点型）的参数。</p>
		<p>在程序加载完成后，控制就传递给 <b>Main() </b>函数。这就是我们在该过程中插入对 <b>WriteLine()</b> 调用的原因。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="EEG">
		</a>
		<h2>步骤 3. 程序结构</h2>
		<p>既然我们已经构建了一个简单的 Hello World 应用程序，那么就让我们停下来分析一下 Visual C# 应用程序的基本组成部分。</p>
		<h3>源代码注释</h3>
		<p>字符 // 将行的剩余部分标记为一个注释，这样 C# 编译器就会忽略它。另外，/* 和 */ 之间的代码也会被当作注释。</p>
		<pre class="codeSample">// This line is ignored by the compiler.
/* This block of text is also
ignored by the Visual C# compiler. */
</pre>
		<h3>Using 指令</h3>
		<p>.NET 框架为开发人员提供了许多有用的类。例如，<b>Console</b> 类处理对控制台窗口的输入和输出。这些类是按照层次树的形式组织的。<b>Console</b> 类的完全限定名实际上是 <b>System.Console</b>。其他的类包括 <b>System.IO.FileStream</b> 和 <b>System.Collections.Queue</b>。</p>
		<p>
				<b>using</b> 指令允许您在不使用完全限定名的情况下引用命名空间中的类。以<i>斜体突出显示</i>的 代码应用了 <b>using</b> 指令。</p>
		<pre class="codeSample">using System;
class Class1
{
    static void Main(string[] args)
    {
        System.Console.WriteLine ("Hello, C#.NET World!");
        Console.WriteLine ("Hello, C#.NET World!");
    }
}
</pre>
		<h3>类声明</h3>
		<p>与 C++ 或 Visual Basic 不同，Visual C# 中的所有函数都必须封装在一个类中。<b>class</b> 语句声明一个新的 C# 类。就 Hello World 应用程序来说，<b>Class1</b> 类包含一个函数，即 <b>Main()</b> 函数。如果用一个 <b>namespace</b> 块将类的定义括起来，就可以把类组织为诸如 <b>MsdnAA.QuickSortApp</b> 这样的层次。</p>
		<p>在本入门指南中，我们并不打算深入地介绍类，但是我们将为您简要概述为什么类是我们的示例应用程序的一部分。</p>
		<h3>Main() 函数</h3>
		<p>在应用程序加载到内存之后，<b>Main() </b>函数就会接收控制，因此，应该将应用程序启动代码放在此函数中。传递给程序的命令行参数存储在 <b>args</b> 字符串数组中。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="EIAAC">
		</a>
		<h2>步骤 4. 控制台输入</h2>
		<p>现在，我们将继续编写 QuickSort 应用程序。我们需要做的第一件事就是提示用户提供输入和输出文件。</p>
		<h3>修改源代码</h3>
		<p>更改 C# 源文件 (class1.cs)，如下面以斜体突出显示的代码所示。其他的差异（如类名）可忽略不计。</p>
		<pre class="codeSample">// Import namespaces
using System;
// Declare namespace
namespace MsdnAA
{
    // Declare application class
    class QuickSortApp
    {
        // Application initialization
        static void Main (string[] szArgs)
        {
            // Describe program function
            Console.WriteLine ("QuickSort C#.NET Sample Application\n");
            // Prompt user for filenames
            Console.Write ("Source: ");
            string szSrcFile = Console.ReadLine ();
            Console.Write ("Output: ");
            string szDestFile = Console.ReadLine ();
        }
    }
}
</pre>
		<h3>从控制台进行读取</h3>
		<p>
				<b>Console</b> 类的 <b>ReadLine() </b>方法提示用户输入，并返回输入的字符串。它会自动地为字符串处理内存分配，由于使用了 .NET 垃圾回收器，您不需要做任何释放内存的工作。</p>
		<h3>程序输出</h3>
		<p>从菜单中选择 <b>Debug | Start Without Debugging </b>来运行程序。这是到此为止来自 QuickSort 应用程序的输出的屏幕截图。</p>
		<div style="WIDTH: 433px">
				<img height="127" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-09.gif" width="433" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="EFBAC">
		</a>
		<h2>步骤 5. 使用数组</h2>
		<p>在对从输入读取的行进行排序之前，程序需要将其存储到一个数组中。我们将简要讨论可实现对象数组的 .NET 基类的用法。</p>
		<h3>修改源代码</h3>
		<p>更改 C# 源文件 (class1.cs)，如下面以斜体突出显示的代码所示。其他的差异（如类名）可忽略不计。</p>
		<pre class="codeSample">// Import namespaces
using System;
using System.Collections;
// Declare namespace
namespace MsdnAA
{
    // Declare application class
    class QuickSortApp
    {
        // Application initialization
        static void Main (string[] szArgs)
        {
            // Describe program function
            Console.WriteLine ("QuickSort C#.NET Sample Application\n");
            // Prompt user for filenames
            Console.Write ("Source: ");
            string szSrcFile = Console.ReadLine ();
            Console.Write ("Output: ");
            string szDestFile = Console.ReadLine ();
            // TODO: Read contents of source file
            ArrayList szContents = new ArrayList ();
        }
    }
}
</pre>
		<h3>使用 ArrayList 类</h3>
		<p>我们将导入 System.Collections 命名空间，这样我们就可以直接引用 <b>ArrayList</b>。此类实现大小可动态调整的对象数组。要插入新的元素，可以简单地将对象传递到 <b>ArrayList</b> 类的 <b>Add() </b>方法。新的数组元素将引用原始的对象，而垃圾回收器将处理它的释放。</p>
		<pre class="codeSample">string szElement = "insert-me";
ArrayList szArray = new ArrayList ();
szArray.Add (szElement);
</pre>
		<p>要检索现有的元素，请将所需元素的索引传递给 <b>Item() </b>方法。另外，作为一种简写形式，还可以使用方括号 <b>operator []</b>，它实际上映射到<b> Item()</b> 方法。</p>
		<pre class="codeSample">Console.WriteLine (szArray[2]);
Console.WriteLine (szArray.Item (2));
</pre>
		<p>
				<b>ArrayList</b> 类中还有许多其他方法，但是插入和检索都是我们需要在此示例中使用的。请查阅 MSDN 库以获得完整的参考指南。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="EKCAC">
		</a>
		<h2>步骤 6. 文件输入/输出</h2>
		<p>现在，让我们来实现读取输入文件和写入输出文件。我们将每一行读取到一个字符串数组中，然后输出该字符串数组。在下一步中，我们将使用 QuickSort 算法来对该数组进行排序。</p>
		<h3>修改源代码</h3>
		<p>更改 C# 源文件 (class1.cs)，如下面以斜体突出显示的代码所示。其他的差异（如类名）可忽略不计。</p>
		<pre class="codeSample">// Import namespaces
using System;
using System.Collections;
using System.IO;
// Declare namespace
namespace MsdnAA
{
    // Declare application class
    class QuickSortApp
    {
        // Application initialization
        static void Main (string[] szArgs)
        {
            ... ... ...
            // Read contents of source file
            string szSrcLine;
            ArrayList szContents = new ArrayList ();
            FileStream fsInput = new FileStream (szSrcFile, FileMode.Open,
                FileAccess.Read);
            StreamReader srInput = new StreamReader (fsInput);
            while ((szSrcLine = srInput.ReadLine ()) != null)
            {
                // Append to array
                szContents.Add (szSrcLine);
            }
            srInput.Close ();
            fsInput.Close ();
            // TODO: Pass to QuickSort function
            // Write sorted lines
            FileStream fsOutput = new FileStream (szDestFile,
                FileMode.Create, FileAccess.Write);
            StreamWriter srOutput = new StreamWriter (fsOutput);
            for (int nIndex = 0; nIndex &lt; szContents.Count; nIndex++)
            {
                // Write line to output file
                srOutput.WriteLine (szContents[nIndex]);
            }
            srOutput.Close ();
            fsOutput.Close ();
            // Report program success
            Console.WriteLine ("\nThe sorted lines have been written.\n\n");
        }
    }
}
</pre>
		<h3>从源文件进行读取</h3>
		<p>使用 <b>FileStream</b> 类打开源文件，然后加入 <b>StreamReader</b> 类，这样我们就可以使用它的 <b>ReadLine() </b>方法了。现在，我们调用 <b>ReadLine()</b> 方法，直到它返回 <b>null</b>，这表示到达文件结尾。在循环过程中，我们将读取的行存储到字符串数组中，然后关闭这两个对象。</p>
		<div style="WIDTH: 481px">
				<img height="164" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-10.gif" width="481" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<h4>写入输出文件</h4>
		<p>假设已经用 QuickSort 对字符串数组进行了排序，接下来要做的事情就是输出数组的内容。按照同样的方式，我们将 <b>StreamWriter</b> 对象附加到 <b>FileStream</b> 对象上。这使得我们可以使用 <b>WriteLine() </b>方法，该方法能够很方便地模仿 <b>Console</b> 类的行为。一旦遍历了数组，我们便可以象前面一样关闭这两个对象。</p>
		<div style="WIDTH: 481px">
				<img height="164" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-11.gif" width="481" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="EAEAC">
		</a>
		<h2>步骤 7. 创建函数</h2>
		<p>最后一步就是创建一个函数来在字符串数组中运行 QuickSort。我们将此函数放到应用程序类 <b>QuickSortApp</b> 之中。</p>
		<h3>修改源代码</h3>
		<p>更改 C# 源文件 (class1.cs)，如下面以斜体突出显示的 代码所示。其他的差异（如类名）可忽略不计。</p>
		<pre class="codeSample">// Import namespaces
using System;
using System.Collections;
using System.IO;
// Declare namespace
namespace MsdnAA
{
    // Declare application class
    class QuickSortApp
    {
        // Application initialization
        static void Main (string[] szArgs)
        {
            ... ... ...
            // Pass to QuickSort function
            QuickSort (szContents, 0, szContents.Count - 1);
            ... ... ...
        }
        // QuickSort implementation
        static void QuickSort (ArrayList szArray, int nLower, int nUpper)
        {
            // Check for non-base case
            if (nLower &lt; nUpper)
            {
                // Split and sort partitions
                int nSplit = Partition (szArray, nLower, nUpper);
                QuickSort (szArray, nLower, nSplit - 1);
                QuickSort (szArray, nSplit + 1, nUpper);
            }
        }
        // QuickSort partition implementation
        static int Partition (ArrayList szArray, int nLower, int nUpper)
        {
            // Pivot with first element
            int nLeft = nLower + 1;
            string szPivot = (string) szArray[nLower];
            int nRight = nUpper;
            // Partition array elements
            string szSwap;
            while (nLeft &lt;= nRight)
            {
                // Find item out of place
                while (nLeft &lt;= nRight)
                {
                    if (((string) szArray[nLeft]).CompareTo (szPivot) &gt; 0)
                        break;
                    nLeft = nLeft + 1;
                }
                while (nLeft &lt;= nRight)
                {
                    if (((string) szArray[nRight]).CompareTo (szPivot) &lt;= 0)
                        break;
                    nRight = nRight - 1;
                }
                // Swap values if necessary
                if (nLeft &lt; nRight)
                {
                    szSwap = (string) szArray[nLeft];
                    szArray[nLeft] = szArray[nRight];
                    szArray[nRight] = szSwap;
                    nLeft = nLeft + 1;
                    nRight = nRight - 1;
                }
            }
            // Move pivot element
            szSwap = (string) szArray[nLower];
            szArray[nLower] = szArray[nRight];
            szArray[nRight] = szSwap;
            return nRight;
        }
    }
}
</pre>
		<h3>QuickSort() 函数</h3>
		<p>这个函数需要三个参数：对数组的引用、下界和上界。它调用 <b>Partition() </b>函数将数组分成两部分，其中一部分包含 Pivot 值之前的所有字符串，另一部分包含 Pivot 值之后的所有字符串。然后，它调用自身来对每个部分进行排序。</p>
		<p>上面修改中的注释应该说明了每个代码块的作用。唯一的新概念就是 <b>CompareTo()</b> 方法的使用，该方法是 <b>String</b> 类的成员，并且应该是自说明的。</p>
		<h4>运行 QuickSort 应用程序</h4>
		<p>这一步完成 QuickSort C# 示例应用程序。现在，可以构建项目并运行应用程序。需要提供一个示例文本文件，以供其进行排序。将该文件放在与 EXE 文件相同的目录中。</p>
		<div style="WIDTH: 467px">
				<img height="194" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-12.gif" width="467" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<h4>程序输出</h4>
		<p>下面是已完成的 QuickSort C# .NET 示例应用程序的输出。可以查看示例输入文件 <a href="http://msdn.microsoft.com/library/en-us/dnaa/html/getstart_vcpp.asp?FRAME=true#getstart_vcpp_topic12a" target="_blank">'example.txt'</a> 和输出文件 <a href="http://msdn.microsoft.com/library/en-us/dnaa/html/getstart_vcpp.asp?FRAME=true#getstart_vcpp_topic12b" target="_blank">'output.txt'</a>。</p>
		<div style="WIDTH: 494px">
				<img height="157" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-13.gif" width="494" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="EVFAC">
		</a>
		<h2>步骤 8. 使用调试器</h2>
		<p>调试器是诊断程序问题的一个必不可少的工具。我们觉得有必要在本入门指南中对其进行介绍。这最后一步将向您展示如何走查程序和使用诸如 QuickWatch 这样的功能。</p>
		<h3>设置断点</h3>
		<p>当程序在调试器中运行时，断点会暂停程序的执行，从而使开发人员能够控制调试器。要设置断点，请右键单击您想要程序暂停的行，然后单击 <b>Insert</b><b>Breakpoint</b>，如下所示。</p>
		<div style="WIDTH: 450px">
				<img height="149" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-14.gif" width="450" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>
				<b>注</b>：带有断点的行以红色突出显示。通过再次右键单击该行并选择 <b>Remove Breakpoint</b> 可以删除断点。</p>
		<h3>单步调试程序</h3>
		<p>既然设置了断点（最好是在前面所示的行中），就让我们在调试器中运行程序。在 <b>Debug</b> 菜单中，选择 <b>Start</b> 而不是同前面一样选择 <b>Start Without Debugging</b>。这样就在调试器中启动了程序，并因而激活了断点。</p>
		<p>一旦程序遇到断点，调试器便会接收程序的控制。这时会有一个箭头指向当前执行的行。</p>
		<div style="WIDTH: 556px">
				<img height="131" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-15.gif" width="556" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>要单步调试一行代码，可以选择 <b>Debug | Step Over</b> 并观察光标是否移到下一行。<b>Debug | Step Into</b> 命令允许您单步执行将要调用的函数。进行两次 <b>Step Over</b> 之后的屏幕如下所示。</p>
		<div style="WIDTH: 457px">
				<img height="120" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-16.gif" width="457" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>如果想要程序在遇到下一个断点、遇到异常或退出之前继续执行，请从菜单中选择 <b>Debug | Continue</b>。</p>
		<h3>检查变量值</h3>
		<p>当您可以控制调试器时，可将鼠标指针移到变量上以获得它的基本值。</p>
		<div style="WIDTH: 457px">
				<img height="120" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-17.gif" width="457" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>您也可以右键单击变量，然后从上下文菜单中选择 <b>QuickWatch</b>。<b>QuickWatch</b> 将为您提供关于某些变量（如 <b>ArrayList</b> 对象）的更多详细信息。</p>
		<div style="WIDTH: 526px">
				<img height="144" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-18.gif" width="526" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<h3>其他调试器工具</h3>
		<p>Visual Studio 调试器具有许多其他工具（例如 Call Stack 查看器）的功能，可以使用此调试器来查看到此为止调用的函数。还可以获得内存转储和关于进程中线程的信息。我们鼓励您使用这些功能强大的调试工具。</p>
		<div style="WIDTH: 494px">
				<img height="218" alt="" src="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/art/getstart_vcsharp-19.gif" width="494" border="0" />
				<br />
				<p class="figureCaption">
				</p>
				<div class="figureRule">
				</div>
		</div>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="E2IAC">
		</a>
		<h2>小结</h2>
		<p>本入门指南旨在帮助您用 Visual Studio 构建一个简单的 C# 项目。它无法进行全面的介绍。我们鼓励您查询关于 C# 和 .NET 的其他资源，以便更多地学习这些技术。在完成本教程之后，您至少有了一个可用的项目，在您研究 Visual C# 时，可以从修改此这些代码开始。</p>
		<p>为了方便起见，我们提供了完整的源程序和项目文件。您可以通过本文档顶部的目录来访问它们。</p>
		<h3>其他资源</h3>
		<p>我们强烈推荐下面这些关于 C# 和 .NET 平台的书籍。它们是开发人员尝试学习这些新技术的有益资源。 </p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Archer, Tom.<i>Inside C#</i>.Redmond:Microsoft Press, 2001. </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Deitel, Harvey.<i>C#:</i>How to Program.Upper Saddle River, NJ:Prentice Hall, 2001. </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Gunnerson, Eric.<i>A Programmer's Introduction to C#.</i>New York:Apress, 2000. </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Platt, David.<i>Introducing Microsoft .NET.</i>Redmond:Microsoft Press, 2001. </p>
								</td>
						</tr>
				</tbody>
		</table>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="E2JAC">
		</a>
		<h2>补遗：QuickSort C# .NET 的源代码</h2>
		<p>下面是 QuickSort C# .NET 示例应用程序的完整源代码。您可以复制、使用和分发这些代码（无版权费）。注意，这些源代码以"原样"提供并且不作任何保证。</p>
		<pre class="codeSample">//
//  QuickSort C# .NET Sample Application
//  Copyright 2001-2002 Microsoft Corporation. All rights reserved.
//
//  MSDN ACADEMIC ALLIANCE [http://www.msdn.microsoft.com/academic]
//  This sample is part of a vast collection of resources we developed for
//  faculty members in K-12 and higher education. Visit the MSDN AA web site for more!
//  The source code is provided "as is" without warranty.
//
// Import namespaces
using System;
using System.Collections;
using System.IO;
// Declare namespace
namespace MsdnAA
{
    // Declare application class
    class QuickSortApp
    {
        // Application initialization
        static void Main (string[] szArgs)
        {
            // Print startup banner
            Console.WriteLine ("\nQuickSort C#.NET Sample Application");
            Console.WriteLine ("Copyright (c)2001-2002 Microsoft Corporation. All rights reserved.\n");
            Console.WriteLine ("MSDN ACADEMIC ALLIANCE [http://www.msdnaa.net/]\n");
            // Describe program function
            Console.WriteLine ("This example demonstrates the QuickSort algorithm by reading an input file,");
            Console.WriteLine ("sorting its contents, and writing them to a new file.\n");
            // Prompt user for filenames
            Console.Write ("Source: ");
            string szSrcFile = Console.ReadLine ();
            Console.Write ("Output: ");
            string szDestFile = Console.ReadLine ();
            // Read contents of source file
            string szSrcLine;
            ArrayList szContents = new ArrayList ();
            FileStream fsInput = new FileStream (szSrcFile, FileMode.Open, FileAccess.Read);
            StreamReader srInput = new StreamReader (fsInput);
            while ((szSrcLine = srInput.ReadLine ()) != null)
            {
                // Append to array
                szContents.Add (szSrcLine);
            }
            srInput.Close ();
            fsInput.Close ();
            // Pass to QuickSort function
            QuickSort (szContents, 0, szContents.Count - 1);
            // Write sorted lines
            FileStream fsOutput = new FileStream (szDestFile, FileMode.Create, FileAccess.Write);
            StreamWriter srOutput = new StreamWriter (fsOutput);
            for (int nIndex = 0; nIndex &lt; szContents.Count; nIndex++)
            {
                // Write line to output file
                srOutput.WriteLine (szContents[nIndex]);
            }
            srOutput.Close ();
            fsOutput.Close ();
            // Report program success
            Console.WriteLine ("\nThe sorted lines have been written to the output file.\n\n");
        }
        // QuickSort implementation
        private static void QuickSort (ArrayList szArray, int nLower, int nUpper)
        {
            // Check for non-base case
            if (nLower &lt; nUpper)
            {
                // Split and sort partitions
                int nSplit = Partition (szArray, nLower, nUpper);
                QuickSort (szArray, nLower, nSplit - 1);
                QuickSort (szArray, nSplit + 1, nUpper);
            }
        }
        // QuickSort partition implementation
        private static int Partition (ArrayList szArray, int nLower, int nUpper)
        {
            // Pivot with first element
            int nLeft = nLower + 1;
            string szPivot = (string) szArray[nLower];
            int nRight = nUpper;
            // Partition array elements
            string szSwap;
            while (nLeft &lt;= nRight)
            {
                // Find item out of place
                while (nLeft &lt;= nRight &amp;&amp; ((string) szArray[nLeft]).CompareTo (szPivot) &lt;= 0)
                    nLeft = nLeft + 1;
                while (nLeft &lt;= nRight &amp;&amp; ((string) szArray[nRight]).CompareTo (szPivot) &gt; 0)
                    nRight = nRight - 1;
                // Swap values if necessary
                if (nLeft &lt; nRight)
                {
                    szSwap = (string) szArray[nLeft];
                    szArray[nLeft] = szArray[nRight];
                    szArray[nRight] = szSwap;
                    nLeft = nLeft + 1;
                    nRight = nRight - 1;
                }
            }
            // Move pivot element
            szSwap = (string) szArray[nLower];
            szArray[nLower] = szArray[nRight];
            szArray[nRight] = szSwap;
            return nRight;
        }
    }
}
</pre>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
		</div>
		<a name="E6JAC">
		</a>
		<h2>补遗：关于 QuickSort C# .NET</h2>
		<p>为了演示 QuickSort Visual C# .NET 示例应用程序实际是如何运行的，我们提供了编译好的可执行文件。您可以通过编译这些项目文件来创建自己的可执行文件。单击 <a href="http://download.microsoft.com/download/f/f/8/ff8c8040-d1a7-4402-90df-5d1aaa7d37af/Quicksort_Visual_CSharp_.NET.exe" target="_blank">Quicksort_Visual_CSharp_.NET.exe</a>，下载源代码项目文件和可执行文件包。</p>
		<h3>使用应用程序</h3>
		<p>启动 <b>Command Prompt</b>（从"开始"菜单运行"cmd.exe"）。使用 CD 命令将目录更改为可执行文件所在的目录。然后运行"quicksort.exe"。</p>
		<p>程序将提示您提供输入和输出文件的名称。任何包含多行的文本文件均可使用。如果需要，可以使用记事本来创建一个此类文件。然后，该程序将对输入文件的内容进行排序，并且将其写入输出文件。</p>
		<h3>示例程序输出</h3>
		<p>下面是来自此 QuickSort C# .NET 应用程序的一个实例的输出。此示例演示了 QuickSort 算法，方法是读取输入文件、对文件的内容进行排序，然后将其写入新的文件。用户输入的文本以下划线标记。</p>
		<p>您可以查看下面的示例输入文件 <a href="http://msdn.microsoft.com/library/en-us/dnaa/html/getstart_vcpp.asp?FRAME=true#getstart_vcpp_topic12a" target="_blank">'example.txt'</a> 和输出文件 <a href="http://msdn.microsoft.com/library/en-us/dnaa/html/getstart_vcpp.asp?FRAME=true#getstart_vcpp_topic12b" target="_blank">'output.txt'</a>。</p>
		<pre class="codeSample">QuickSort C# .NET Sample Application
Copyright (c)2001-2002 Microsoft Corporation. All rights reserved.
MSDN ACADEMIC ALLIANCE [http://www.msdn.microsoft.com/academic]
This example demonstrates the QuickSort algorithm by reading an input file,
sorting its contents, and writing them to a new file.
Source: example.txt
Output: output.txt
The sorted lines have been written to the output file.
</pre>
		<p>查看示例输入文件"example.txt"：</p>
		<pre class="codeSample">Visual C#
Windows Embedded
JavaScript
Speech API
ASP.NET
VBScript
Windows Media
Visual Basic
.NET Framework
BizTalk Server
XML Parser
Internet Explorer
Visual C#
SQL Server
Windows XP
DirectX API
</pre>
		<p>查看示例输出文件"output.txt"：</p>
		<pre class="codeSample">.NET Framework
ASP.NET
BizTalk Server
DirectX API
Internet Explorer
JavaScript
Speech API
SQL Server
VBScript
Visual Basic
Visual C#
Visual C#
Windows Embedded
Windows Media
Windows XP
XML Parser
</pre>
		<p>
				<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaa/html/getstart_vcsharp.asp" target="_blank">转到原英文页面</a>
		</p>
		<br style="FONT-SIZE: 0pt" clear="all" />
		<div style="MARGIN-TOP: 16px; MARGIN-BOTTOM: 20px; WIDTH: 100%">
				<table cellspacing="0" cellpadding="0" width="100%" border="0">
						<tbody>
								<tr>
										<td>
												<a href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">
														<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
												</a>
												<a class="topOfPage" href="http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.mspx#top">返回页首</a>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
<img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-19 15:41 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]C#锐利体验</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24279.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Mon, 19 Mar 2007 07:37:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24279.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24279.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24279.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24279.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 发布日期： 2/4/2002 | 更新日期： 6/22/2004						南京邮电学院 李建忠（jzli@china.com）				C#语言是一门简单，现代，优雅，面向对象，类型安全，平台独立的一门新型组件编程语言。其语法风格源自C/C++家族，融合了Visual Basic的高效和C/C++强大，是微软为奠定其下一互联网霸主地位而打造的Microsoft.Net平台的主流语言。其...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24279.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-19 15:37 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/19/24279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c/c++ 资源</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24190.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Sat, 17 Mar 2007 11:46:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24190.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24190.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24190.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24190.html</trackback:ping><description><![CDATA[
		<font size="7">个人主页<br /></font>
		<font size="2">Dennis Ritchie's home page<br />http://cm.bell-labs.com/cm/cs/who/dmr/index.html<br /><br />Brian Kernighan's home page<br />http://cm.bell-labs.com/cm/cs/who/bwk/index.html<br /><br />W. Richard Stevens' Home Page<br />http://www.kohala.com/start/<br /><br />Bjarne Stroustrup's homepage<br />http://www.research.att.com/~bs/homepage.html<br />http://akpublic.research.att.com/~bs/homepage.html<br /><br />Stanley Lippman<br />http://staff.develop.com/slip/<br /><br />Edsger W. Dijkstra's home page<br />http://www.cs.utexas.edu/users/EWD/welcome.html<br /><br />Andrew S. Tanenbaum's home page<br />http://www.cs.vu.nl/~ast/<br /><br />Donald E. Knuth's home page<br />http://www-cs-faculty.stanford.edu/~knuth/<br /><br />Linus Torvalds' home page<br />http://www.cs.helsinki.fi/u/torvalds/<br /><br />Bruce Eckel<br />http://mindview.net/<br /><br />Douglas Comer<br />http://www.cs.purdue.edu/people/comer<br /><br />Thomas H. Cormen<br />http://www.cs.dartmouth.edu/~thc/<br /><br />Charles E. Leiserson<br />http://supertech.lcs.mit.edu/~cel/<br /><br />Ronald L. Rivest<br />http://theory.lcs.mit.edu/~rivest/<br /><br />Clifford Stein<br />http://www.ieor.columbia.edu/~cs2035/<br /><br />Nicolai M. Josuttis（《c++标准程序库》作者）<br />http://www.josuttis.com/<br /><br />候捷主页<br />http://jjhou.csdn.net/<br /><br />裘宗燕主页<br />http://www.math.pku.edu.cn/teachers/qiuzy/</font>
		<br />
		<br />
		<br />
		<span style="FONT-SIZE: 13px">
				<font size="18">c/c++常用资源</font>
				<br />
				<br />aix在线文档：<br />http://publib16.boulder.ibm.com/cgi-bin/ds_rslt#1<br /><br />各种c/c++编译器<br />http://www.clipx.net/norton.php<br /><br />UNIX Programming FAQ v1.37<br />http://www.erlenstar.demon.co.uk/unix/faq_toc.html<br /><br />UNIX Programming FAQ 中文版 v0.1.0<br />http://www.linuxforum.net/books/upfaq/book1.htm<br /><br />C++ Coding Standard <br />http://www.possibility.com/Cpp/CppCodingStandard.html<br /><br />GNU编码标准<br />http://www.linuxforum.net/books/gcodestd.html<br /><br />C/C++ Reference <br />http://www.cppreference.com/<br /><br />C/C++<br />http://www.cplusplus.com/<br /><br />C++ Standard Template Library<br />http://www.msoe.edu/eecs/ce/courseinfo/stl/<br /><br />C Standard Library<br />http://www.infosys.utas.edu.au/info/documentation/C/CStdLib.html<br /><br />GCC的主页<br />http://gcc.gnu.org<br /><br />喜欢算法的朋友，这里有CLRS和TAOCP的讨论<br />http://online.ysu.edu.cn/personal/yyf/weitao/taocp/<br />http://online.ysu.edu.cn/personal/yyf/weitao/taocp/clrs.htm<br /><br />RFC<br />http://www.rfc-editor.org/<br /><br />SGI STL<br />http://www.sgi.com/tech/stl/<br /><br />Blitz++，一个针对科学计算的C++ class library<br />http://www.oonumerics.org/blitz/</span>
		<br />
		<br />
		<br />
		<span style="FONT-SIZE: 13px">
				<font size="18">c/c++书籍下载</font>
				<br />
				<br />大量c/c++书籍下载的ftp（匿名访问）<br />ftp.math.nankai.edu.cn<br />ftp://ftp.cdut.edu.cn/pub3/uncate_doc （uiibono提供）<br /><br />UNIX环境高级编程，TCP/IP详解，C++ Primer 3rd Edition 中文版下载<br />http://www.mamiyami.com/<br /><br />Advanced Linux Programming<br />http://www.advancedlinuxprogramming.com/<br /><br />Object-oriented Programming with ANSI-C<br />http://www.planetpdf.com/codecuts/pdfs/ooc.pdf</span>
		<br />
		<br />
		<br />
		<br />
		<font size="2">The Linux Programmer's Guide<br /></font>
		<a href="http://www.tldp.org/LDP/lpg/node1.html" target="_blank">
				<font color="#000000" size="2">http://www.tldp.org/LDP/lpg/node1.html</font>
		</a>
		<br />
		<br />
		<font size="2">COM 书籍下载：<br /></font>
		<a href="http://bbs.chinaunix.net/forum/viewtopic.php?t=299207" target="_blank">
				<font color="#000000" size="2">http://bbs.chinaunix.net/forum/viewtopic.php?t=299207</font>
		</a>
		<br />
		<br />
		<br />
<img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-17 19:46 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]写给C语言初学者的话</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24187.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Sat, 17 Mar 2007 11:24:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24187.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24187.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24187.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24187.html</trackback:ping><description><![CDATA[
		<span style="FONT-SIZE: 13px">写给C语言初学者的话<br />                                 --www.chinaunix.net(ldap)<br /><br />    前些天我写了一篇“Unix C语言值得注意的地方”一贴，回贴中谈到学习国外的开源软件中的高质量代码的问题，但是有朋友跟我说，在看代码的过程中感觉难度很大，想想也是如此，动辄十几万行的程序如果没有人指点的话是很难找到切入点的，所以我撰写了此文希望能对广大C语言爱好者有所帮助，在文章中有很多煽情的地方还请大家原谅，因为这篇文章使我想到了刚刚毕业的时候，所以有点感慨。同时文章中还有一些个人偏见存在，希望持反方向意见的人多多包涵，既然是偏见，那它只是偏见。<br /><br />    学习C语言不要心急，要循序渐进，须知欲速则不达的道理。千万不要盲目的写大量的代码，这样做只会堆出大量的低档次代码，同时使你形成不好的代码习惯。先买本基础的教材来看看，使得对C语言有个初步的认识，其实我现在手头上还放着《The C Programming Language》和《C程序设计（第二版）》（大学教材）呢，有些时候我还会为了一些基本性的概念来翻翻看呢。<br /><br />    如果你的身边有高水平的开发人员，那么再好不过了，多多向别人请教。但是就我了解的情况来看，大部分的初学者并没有在进入IT行业后得到一个资深的软件工程师的指导，而恰恰是在入司后就被推向前线，替老板们骗取客户口袋里的钱，在这个过程中很多人都是在苦苦的堆代码，赚着可怜的薪资。尽管我也是在拿着可怜的钱，但是有一点我是幸运的，因为我在我的第一家公司里遇到了带领我走向Unix和C语言领域的导师，正是他的一句“Unix和C语言是你一生都要去学习的技术”让我狂热的爱上了它们，正是他的一句“你有root口令，并不是你有root口令这么简单，更多的是一种责任”（说这句话的前提是我用root口令进入SUN服务器后删除了别人的东西，因为我认为这些是无用的东西）使我对责任这两个字有一个非常具体的认识。所以在这里请广大读者允许我用一些篇幅来对我neusoft的导师yuhj表示深深的感谢。同时也对CU的朋友们表示深深的感谢，可以说，你们是我的第二导师，我已经离不开你们了。<br /><br />    希望大家都比我幸运，没有得到幸运之神垂青的朋友们也不要灰心，多上CU上来和大家交流交流，讨论讨论吧，但是注意在论坛上讨论的时候不要刨根问底，很多事情不是一句话就说的清楚的，别人只能给你一个指引，再具体的只有靠自己多研究研究、琢磨琢磨。闲暇的时候去精华区看看，你会有意外的收获的。<br /><br />    千万不要一看到英文就头大，尽管我也是这样，并不是看不懂（毕竟也接受过CET4、6级哑巴英语的教育，还是能看懂的）。man的帮助是最好的教材并且很多国外的论坛对技术的描述是很清楚的，也是很简单的，更重要的是，你会在上面看到些在国内论坛上看不到的东西（计算机的技术一直都是由西方向东方传递，希望有朝一日老外都到我们中国的论坛上来寻找技术资料）。<br /><br />    学习C语言有一件事情也是必须要学的，而且最好是同时学，有的朋友可能已经猜出来了，没错，是Unix。Unix和C语言可以说大家提的很多了，有Unix的地方就有C语言，同时也正是有了C语言，才有了Unix（我们还是先讨论讨论鸡生蛋还是蛋生鸡的哲学问题吧，谁拿西红柿打我），甚至有人说C语言就是为了Unix而设计的，可见Unix和C语言之间的非同寻常的关系。学习Unix现在容易多了，以前Unix都是运行在大型的服务器上的，可是现在有了Linux（按照GNU的意思，Linux就是Linux还不能叫Unix），大家可以在自己的PC上装一套Linux来学习，注意学习Linux不要拿Linux和Windows来比较，它们不可同日而语。Linux会让你知道什么是经典，永远让你在一个方向上大展宏图，Windows只会让你在别人的套子里耍上大刀，不时的还要换一个套子耍耍。下面罗列了一些我在学习Unix的一些经验：<br /><br />    1、学习Unix和C语言，先向大家推荐一本书《Unix高级环境编程》，这本书是学习Unix和C的经典之作，尽量把书中提到的系统调用都写个练习程序，先感性的认识一下Linux系统提供给用户的系统调用都是干什么的，怎么用。系统调用是内核提供给用户的功能用以申请内核服务，对于Linux内核的学习，从系统调用入手是个不错的办法。学习过程可以参看Linux的联机帮助，和网络上的资料。当你觉得差不多了的时候，那我给大家出一道联系题目吧：实现一个ftp服务器和客户端的功能，完全可以自己定义一些应用层的协议，只要能实现用简单的命令传输文件就可以了。<br /><br />    这个题目可以使你练习到TCP/IP的基本编程方法和文件操作的基本方法对于后面学习内核的文件系统会有帮助的。<br /><br /><br />    2、当你对Unix系统有了些了解后，同时对于大部分的系统调用（关键是关于文件的系统调用，对于Linux系统的内核来说从文件系统入手相对容易一些）也有了清楚的认识后，再推荐你一本书《Linux内核情景分析》，该书是关于Linux内核的经典之作唯一美中不足的是没有关于网络子系统的详细介绍。你可以从文件系统的系统调用入手，慢慢的你就会对Linux有了一个更深入的认识。同时注意很多经典的方法和思想在Linux中的运用。你会认识到为什么Unix把所有的东西都看成文件，对什么东西操作都是对文件操作，你会慢慢体会到Unix的经典之处了。<br /><br />    3、当你对Linux内核有了些了解后，你就可以找个方向来专门发展了，如果你想对眼下流行的网络编程感兴趣，那么再推荐你一本书《TCP/IP详细解释》，这本书是关于TCP/IP协议的经典之作。你会学习到TCP/IP协议栈是如果实现的，为什么，各层协议之间是如何工作的。你看完了这本书后，你就可以自己写一个dos攻击程序和sniffer了。<br /><br />    我说的简单，其实我提到的每本书至少都够你研究很长时间的，所以希望初学者别着急不骄不躁，相信只要努力过，一定会成为高手的。<br /><br />    在写代码的时候大家要注意养成好的代码习惯和风格还有抽象能力。<br /><br />下面给出大家在写代码的时候的20字方针：<br /><br />    <font color="red">函数要小</font><br />    尽量的把函数弄的通用点，代码行少点，一个函数只完成一个简单的功能，一眼就能看出来此函数有没有代码错误，每个函数都是健壮的，那么你的程序就是健壮的。<br /><br />    <font color="red">代码要少</font>    完成一个功能的时候在逻辑清楚的情况下代码越少越好，千万不要比代码谁写的多啊。<br /><br />    <font color="red">算法要好</font>    在完成一个功能的时候要考虑效率，目前计算机的内存很大，所以内存已经不是首要考虑的因素了，但是在某些特殊的地方效率还是很重要的。有效率高的算法，就不用效率低的算法，看看本版有一篇精华贴子是关于把一个字符窜两边的空格去掉的帖子（trim），很多人都提出了算法，但是有一个算法是最好的，效率最高，代码最少，是算法要好的最好体现<br /><br />    <font color="red">命名要清</font>    命名要清楚，最要用汉语中的谓宾结构如set_buffsize()<br /><br />     <font color="red">文件要多</font>    尽量把一个大的程序安功能分成多个文件，一个文件尽量不要超作1000行，这样就很清楚的知道那个文件代码是健壮的，那个文件有可能有隐患，在代码检查的时候可以有针对性的检查某几个文件</span>
		<br />
<img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-17 19:24 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>3.17</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24163.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Sat, 17 Mar 2007 03:32:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24163.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24163.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24163.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24163.html</trackback:ping><description><![CDATA[
		<p>      这段日子，中国电信在我住的地方没有资源，偶尔就来网吧逛了<br />      最近在看《新九品芝麻官》，不可否认，我喜欢看黄子华演的电视剧，其实戏内戏外，都是一样，人生就是一场戏了，黄在剧情里透露出的潇洒和放荡不羁以及高超的搞笑技巧，自成一派，感觉和星爷的风格有点类似了。<br /></p>
<img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-17 11:32 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/17/24163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp编程实例</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24144.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Fri, 16 Mar 2007 13:06:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24144.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24144.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24144.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24144.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24144.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第一课.用ASP实现网上“五子棋”大赛						“五子棋”是大家都非常熟悉的一种益智类游戏，相关的游戏软件也非常多，在此我向大家隆重推出一款新的纯“网络版”的五子棋，它利用ASP做为开发环境，因此在Internet上对战的时候无需下载客户端软件，只要你有一个浏览器就可以了。你也可以在局域网上进行这个游戏。 对于ASP，我不想做过多的说明，在以前的文章中，我已经说过很多。 游戏的过程是...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24144.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-16 21:06 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24144.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp编程经验谈</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24143.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Fri, 16 Mar 2007 13:04:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24143.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24143.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24143.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24143.html</trackback:ping><description><![CDATA[
		<table class="t_msg" cellspacing="0" cellpadding="4" border="0">
				<tbody>
						<tr>
								<td class="line" style="PADDING-TOP: 10px" valign="top" height="100%">
										<a title="评分 10" href="http://bbs.hackbase.com/misc.php?action=viewratings&amp;tid=3048181&amp;pid=4076924" name="pid4076924">
												<img alt="" src="http://bbs.hackbase.com/images/blacknoble/agree.gif" align="right" border="0" />
												<img alt="" src="http://bbs.hackbase.com/images/blacknoble/agree.gif" align="right" border="0" />
												<img alt="" src="http://bbs.hackbase.com/images/blacknoble/agree.gif" align="right" border="0" />
												<img alt="" src="http://bbs.hackbase.com/images/blacknoble/agree.gif" align="right" border="0" />
												<img alt="" src="http://bbs.hackbase.com/images/blacknoble/agree.gif" align="right" border="0" />
										</a>
										<span class="bold">第一课.ASP开发10条经验总结</span>
										<br />
										<br />
										<div style="FONT-SIZE: 11px">历时半年，我独自一人完成了一个局级单位的管理信息系统，共发布BETA版29次，正式版本3次。ASP+ORACLE环境，285个ASP文件，功能涉及数据录入、修改、模糊查询、自动统计、数据分析和报表，这个项目正在申报省级成果，现将我的10条经验总结如下，不对之处欢迎批评指正: <br /><br />1. 不要再做ASP是否过时的讨论，重要的不是你是否使用先进的技术，而是你的设计思想是否先进；<br /><br />2. 设计时要考虑项目的通用性，永远不要做没有推广价值的东西；<br /><br />3. 程序设计要简洁，足够好的面向过程远远优于蹩脚的面向对象；<br /><br />4. 理论是为实践服务的，所以不要被理论（尤其是设计模式）束缚；<br /><br />5. 分工合理的情况下尽可能少的人员构成项目小组，通信的开销实在太大了；<br /><br />6.没有不变的需求，要为你的程序留下足够多的拓展空间，同时要考虑在系统向其它平台移植时尽量减少工作量和难度的途径；<br /><br />7. 千万不要忽视界面设计，很多情况下这成为对你项目评价的唯一标准；<br /><br />8. 用正规文档记下你的变量使用情况，随着系统的增大，DEBUG的成本几乎成倍增长；<br /><br />9. 能用机器生成的代码就不要去手写，最宝贵的就是时间；<br /><br />10.选数据库还是要选ORACLE！</div>
								</td>
						</tr>
						<tr>
								<td valign="bottom">
										<br />
								</td>
						</tr>
				</tbody>
		</table>
		<span class="bold">第二课.ASP开发准则</span>
		<br />
		<br />
		<div style="FONT-SIZE: 11px">应用程序服务器被,或最终将被 Web 服务器所使用，它通常是运行 ASP 页面的 IIS 计算机。ASP 是您的对象的唯一客户机。它带来了专门的线程和安全考虑。<br /><br />虽然许多使用 ASP 的 Web 站点根本就不用组件，但在这篇文章中假定 ASP 是 Internet 客户机和组件之间的桥梁。下面的 asp/server01242000.asp"&gt;ASP 组件准则（英文）提供<br /><br />ASP 和组件之间的划分服务 <br /><br />ASP 最常用于在服务器上创建供客户机使用的 HTML 或 XML 文件，因此我们主要讨论这种使用方案。这就引出了一个常见的问题，如果 ASP 页面在服务器上，那么它们是否属于业务层的一部分呢？在组件世界中，答案通常是否。虽然 ASP 确实在服务器上运行，而且可能与应用程序服务器在同一个空间，但是这不能使它成为业务逻辑的一部分。<br /><br />随着用户界面工具的发展或者随着启用更多的业务对业务方案，拥有这种明确的区别将获得巨大的回报。<br /><br />话说到此，让我们来看一些最重要的业务层和表示层划分准则： <br /><br />令 UI 代码与业务逻辑分离。这包括编写与 UI 耦合的代码，例如使用 ASP 内部组件的 MTS 对象，让它与业务逻辑代码分离，如同在不同的 DLL 中。 <br /><br /><br />将事务与 ASP 页面分离。事务 ASP 在某些情况下非常好，但是组件和多层应用程序会改变这种情况。组件不应该依赖由客户机层来管理它们的事务和业务逻辑语义。 <br /><br /><br />将表示组件（使用请求和响应的组件）与 Web 服务器放在相同的机器和/或进程中。如果将使用 ASP 内部组件对象的对象放在远程机器上，那么对内部组件的所有调用将以回调形式发生。调用 IIS 客户机的是 COM+ 服务器，它显著降低了性能并使安全配置复杂化。可以将这些调整对象放在标记为“库激活”的 COM+ 应用程序中。 <br /><br />ASP 存在于服务器上，因此 ASP 页面必须符合资源共享规则，并且记住可伸缩性。请看下面的详细内容： <br /><br />在“会话”中，管理应尽量避免用户特定的状态。 <br /><br /><br />保持 ASP 无状态，并在可能的情况下允许资源池。 <br /><br />操作方式 <br /><br />在评价某个代码段是否属于业务逻辑或者表示层时，请问一下自己，“如果我必须用按键式电话应用程序代替我的 ASP 页面，那么该代码是否还有用？”如果答案为“是”，那么可以尝试将它划分为业务逻辑代码或者用户界面帮助器代码。 <br /><br />如果改变了客户机后该代码不能用，或者如果它是构造用户界面的帮助器，则该代码属于表示服务层。它在 ASP 页面中，或在使用 ASP 内部组件的组件中。它不属于业务对象组件。<br /><br />理解桌面与 ASP 客户机的区别 <br /><br />ASP 是组件的特殊客户机，不同于桌面上的传统单线程 Win32 应用程序。主要区别概括如下。 <br /><br />线程管理：ASP 是多线程客户机。这意味着可以有许多并发活动一起运行，也许在同一时刻处理不同的 ASP 页面。这说明不能使对象伪称它是唯一的使用者来独占系统。这样做可能有意外的反应，例如，养成一个坏习惯：将对象存储在 ASP 会话或者应用程序变量中。 <br /><br /><br />安全环境：ASP 是由 Web 站点中的 Internet Information Services 5.0 执行的，有低、中、高三种隔离度。甚至这些 Web 站点可以有不同的安全设置、允许或拒绝匿名访问、验证客户等等。所有这些设置产生了大量的方案，即不同的用户帐户最终用的是您的对象。 <br /><br /><br />轻松增长：这不是技术问题，而是 Web 应用程序所提供设施的副效应。传统上，为桌面应用程序增加用户基，要求仔细计划好向已知数量客户机的转出。ASP 已经改变了该过程。在启动和运行后，ASP-Visual Basic 应用程序可以方便地打开，供当地的或世界范围的所有职员、所有业务伙伴和所有客户使用。可以用这种方式描述 — 拥有超链接的单个电子邮件可以使用户基成十倍地增长。您的应用程序为此作好准备了吗？唯一了解的方式是对 Web 站点进行强度测试，以获得实际性能的预期值。关于强度测试的详细信息，请参阅“应用程序生命周期”一节。 <br /><br />在 ASP 内应该如何使用 Visual Basic 对象？在页面范围内创建和取消您的对象。也就是说，尽可能使 ASP 页面无状态，只在暂时状态下依赖会话或应用程序变量。不要将对象存储在会话或应用程序变量中。这将 ASP 线程锁定到您的会话、取消所有可伸缩性的预期值。也就是说，Web 服务器处理的用户数不会超过几十个。如果需要在会话或应用程序中存储内容，请使之成为数据而不是对象。<br /><br />还有可以遵守的许多其他准则。我们建议您阅读 MSDN Voices 上 J. D. Meier 撰写的专栏“Servin' it Up”。该专栏包括了大量的技术、实践和技巧，有助于开发可扩展的、可靠的 ASP 和组件应用程序。<br /><br />参考 <br /><br />asp#server"&gt;MSDN Voices: Servin' it Up Column（英文）<br /><br />SeminarOnline：在 ASP 下使用自定义 COM 组件（英文）<br /><br />asp"&gt;MSDN 杂志（英文）不要将引用存储在会话或应用程序中的 VB 对象中<br /><br />所有 Visual Basic 6.0 组件都是“单元线程”的，就是说它们都运行在 STA 单元中。这意味着如果在线程中创建对象，那么对该对象的所有调用都必须用同一线程服务。许多线程（来自并发 Web 站点用户）使用 STA 对象的同一实例，会引起一连串的活动，有可能成为应用程序中的瓶颈。<br /><br />此外，在会话范围内存储用 Server.CreateObject 创建的 STA 对象，可以有效地将执行线程联系到当前用户，从而将应用程序的最大并发用户数限制到默认的 20xN（N = 处理器数量）。<br /><br />操作方式 <br /><br />如果您按照我们的建议使对象无状态，则不需要存储引用以供客户机复用，并在应用程序范围内存储它们。客户机将能够独立创建、使用和取消它们自己的对象。这就减少了保持会话特有对象的需要，原因是它们不保留会话特有的状态。<br /><br />推荐的方式是使对象无状态，它在需要时访问数据库或其他存储区（例如 cookies 和 LDAP）。<br /><br />如果需要使用会话或应用程序范围的数据，请将数据，而不是处理数据的对象，存储在此。您可以创建一个类，来封装对所需值的处理。<br /><br />参考 <br /><br />asp"&gt;信息：不要在会话或应用程序中存储 STA 对象 (Q243543)（英文）<br /><br />PRB：将 STA COM 组件存储在会话中，会将会话锁定在单线程中 (Q243815)（英文）<br /><br />信息：ASP 下的组件线程模型概要 (Q243544)（英文）<br /><br />学习 IIS 5.0 中的新内容 <br /><br />Internet Information Server 5.0 增加了许多新功能。这些改进均已写入 J.D. Meier 的 MSDN 文章中：asp/server02282000.asp"&gt;沿用 IIS 5.0 中的 ASP（英文）。下面是该文中最重要改进的概述。 <br /><br />改进的、出色的性能 <br /><br /><br />Server.Transfer 和 Server.Execute 方法 <br /><br /><br />集中式错误处理 <br /><br /><br />改进的浏览器功能 <br /><br /><br />改进的脚本引擎 <br /><br /><br />正则表达式分析器 <br /><br /><br />与 ADO 记录集 XML 功能的集成 <br /><br /><br />新的安全性、缓冲、隔离和管理功能</div>
		<div style="FONT-SIZE: 11px"> </div>
		<div style="FONT-SIZE: 11px">
				<span class="bold">第三课.Asp及Web开发中的常见问题</span>
				<br />
				<br />
				<div style="FONT-SIZE: 11px">表格的折行处理.<br /><font face="新宋体">＜table style="TABLE-LAYOUT: fixed" width="200" border="0" cellspacing="0" cellpadding="7" bgcolor="#f7f7f7"＞ <br />＜tr＞ <br />＜td style="LEFT: 0px; WIDTH: 100%; WORD-WRAP: break-word"＞ <br />dffadfdaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasfd<br />ffadfdasfdffadfdasfdffadfdasfdffadfdasf <br />＜/td＞ <br />＜/tr＞ <br />＜/table＞ <br /></font><br />此处主要是用css样式进行控制在＜table＞标签中有个style="TABLE-LAYOUT: fixed",其说明如下<br />语法： <br />table-layout : auto | fixed <br />参数： <br />auto : 　默认的自动算法。布局将基于各单元格的内容。表格在每一单元格读取计算之后才会显示出来。速度很慢 <br />fixed : 　固定布局的算法。在这算法中，水平布局是仅仅基于表格的宽度，表格边框的宽度，单元格间距，列的宽度，而和表格内容无关,此时在＜td＞标签中如果没有WORD-WRAP: break-word样式,表格中的内容将只能显示一部份,具体看表格的宽度了.word-wrap说明如下:<br />语法： <br />word-wrap : normal | break-word <br />参数： <br />normal : 　允许内容顶开指定的容器边界 <br />break-word : 　内容将在边界内换行。如果需要，词内换行（word-break）也会发生 <br />VBSCRIPT标记索引 <br />基本运算 <br />+ 数字加法及字符串连接 <br />- 数字减法 <br />* 数字乘法 <br />/ 数字除法 <br />Mod 求余数 <br />\ 求商数 <br />&amp; 字符串连接 <br />^ 次方 <br />= 相等 <br />＜＞ 不相等 <br />＞= 大于或等于 <br />＞ 大于 <br />＜= 小于或等于 <br />＜ 小于 <br />Not 非 <br />And 且 <br />Or 或 <br />Xor 异或 <br />循环及决策 <br />if ....then 若...则... <br />if ...then...else 若...则...非 <br />else if... 非若 <br />select case... 群组选择条件 <br />end select <br />for ... next 计数循环 <br />while...wend 条件循环(一) <br />do while...loop 条件循环(二) <br />do...loop while 条件循环(三) <br />do until...loop 条件循环(四) <br />do...loop until 条件循环(五) <br />数学函数 <br />Abs 绝对值 <br />Sgn 正负号 <br />Hex 转换成十六进制 <br />Oct 转换成八进制 <br />Sqr 平方根 <br />Int 取整数 <br />Fix 取整数 <br />Round 取整数 <br />Log 以e为底的对数 <br />Sin 正弦函数 <br />Cos 余弦函数 <br />Tan 正切函数 <br />字符串处理函数 <br />Len 字符串长度 <br />Mid 取部分字符串 <br />Left 从字符串开头取部分字符串 <br />Right 从字符串结尾取部分字符串 <br />Lcase 转换成小写 <br />Ucase 转换成大写 <br />Trim 清除字符串开头及结尾的空格符 <br />Ltrim 清除字符串开头空格符 <br />Rtrim 清除字符串结尾空格符 <br />Replace 替换字符串部分字符 <br />Instr 判断是否包含于另一个字符串(从起始搜寻) <br />InstrRev 判断是否包含于另一个字符串(从结尾搜寻) <br />Space 任意字符数的空格符 <br />String 任意字符数的任一字符 <br />StrReverse 反转字符串 <br />Split 以某字符分割字符串 <br />数据类型转换函数 <br />Cint 转换成整形 <br />Cstr 转换成字符串 <br />Clng 转换成常整数 <br />Cbool 转换成布尔函数 <br />Cdate 转换成日期函数 <br />CSng 转换成单精度 <br />CDbl 转换成双精度 <br />日期时间函数 <br />Date 现在日期 <br />Time 现在时间 <br />NOw 现在日期时间 <br />DateAdd 增加日期 <br />DateDiff 两日期差 <br />DateSerial 日期设定 <br />DateValue 日期设定 <br />Year 现在年份 <br />Month 现在月份 <br />Day 现在天 <br />Hour 现在时刻 <br />Minute 现在分钟 <br />Second 现在秒钟 <br />Timer 午夜距现在秒数 <br />TimeSerial 时间设定 <br />TimeValue 时间所属部分 <br />WeekDay 星期名称 <br />MonthName 月份名称 <br />其它函数 <br />Array 产生数组 <br />Asc 字符ASCII码 <br />Chr ASCII码字符 <br />Filter 过滤数组 <br />InputBox 输入窗口 <br />Join 合并数组中的元素 <br />MsgBox 信息窗口 <br />Lbound 数组下界 <br />Ubound 数组上界 <br />指令 <br />Const 设定常数 <br />Dim 定义变量或者数组 <br />Erase 清除数组 <br />ReDim 重新声明数组 <br />Randomize 起始随机数 <br />Rnd 取得随机数 <br />ASP对象 <br />Session对象 <br />IsEmpty 测试Session变量是否存在 <br />TimeOut 设定Session变量生存周期 <br />Abandon 强制清除Session变量 <br />Application对象 <br />IsEmpty 测试Application变量是否存在 <br />Lock 锁定Application变量 <br />Unlock 解除Lock指令的锁定 <br />Cookies对象 <br />Expires 设定Cookies变量的生存周期 <br />Connection对象 <br />Open 打开与数据库的连接 <br />Execute 打开Recordset对象 <br />Close 关闭Connection对象 <br />Recordset对象 <br />movefirst 将记录指针移至第一条 <br />movelast 将记录指针移至最后一条 <br />movenext 将记录指针移至下一条 <br />moveprevious 将记录指针移至上一条 <br />bof 测试是否为recordset的起始 <br />eof 测试是否为recordset的结束 <br />open 打开Recoreset对象 <br />close 关闭recordset对象 <br />fields 读取数据的子对象 <br />fileds.count 字段个数 <br />pagesize 每页记录条数 <br />absolutepage 设定为某页 <br />pagecount 总页数 <br />Absoluteposition 直接跳至某条记录 <br />MicrosoftVBscript运行时错误列表（10进制表示） <br />error # 5 无效的过程调用或参数 <br />error # 5 无效的过程调用或参数 <br />error # 6 溢出 <br />error # 7 内存不够 <br />error # 9 下标越界 <br />error # 10 该数组为定长的或临时被锁定 <br />error # 11 被零除 <br />error # 13 类型不匹配 <br />error # 14 字符串空间不够 <br />error # 17 不能执行所需的操作 <br />error # 28 堆栈溢出 <br />error # 35 未定义过程或函数 <br />error # 48 加载 DLL 时出错 <br />error # 51 内部错误 <br />error # 52 错误的文件名或号码 <br />error # 53 文件未找到 <br />error # 54 错误的文件模式 <br />error # 55 文件已经打开 <br />error # 57 设备 I/O 错误 <br />error # 58 文件已存在 <br />error # 61 磁盘已满 <br />error # 62 输入超出了文件尾 <br />error # 67 文件过多 <br />error # 68 设备不可用 <br />error # 70 没有权限 <br />error # 71 磁盘没有准备好 <br />error # 74 重命名时不能带有其他驱动器符号 <br />error # 75 路径/文件访问错误 <br />error # 76 路径未找到 <br />error # 91 对象变量未设置 <br />error # 92 For 循环未初始化 <br />error # 94 无效使用 Null <br />error # 322 不能创建必要的临时文件 <br />error # 424 缺少对象 <br />error # 429 ActiveX 部件不能创建对象 <br />error # 430 类不支持 Automation 操作 <br />error # 432 Automation 操作中文件名或类名未找到 <br />error # 438 对象不支持此属性或方法 <br />error # 440 Automation 操作错误 <br />error # 445 对象不支持此操作 <br />error # 446 对象不支持已命名参数 <br />error # 447 对象不支持当前区域设置选项 <br />error # 448 未找到已命名参数 <br />error # 449 参数是必选项 <br />error # 450 错误的参数个数或无效的参数属性值 <br />error # 451 对象不是一个集合 <br />error # 453 未找到指定的 DLL 函数 <br />error # 455 代码资源锁定错误 <br />error # 457 此键已与该集合的一个元素关联 <br />error # 458 变量使用了一个 VBScript 中不支持的 Automation 类型 <br />error # 462 远程服务器不存在或不可用 <br />error # 481 无效图片 <br />error # 500 变量未定义 <br />error # 501 非法赋值 <br />error # 502 对象不能安全用 Script 编程 <br />error # 503 对象不能安全初始化 <br />error # 504 对象不能安全创建 <br />error # 505 无效的或无资格的引用 <br />error # 506 类没有被定义 <br />error # 507 出现一个意外错误 <br />error # 1001 内存不够 <br />error # 1002 语法错误 <br />error # 1003 缺少 ':' <br />error # 1005 缺少 '(' <br />error # 1006 缺少 ')' <br />error # 1007 缺少 ']' <br />error # 1010 缺少标识符 <br />error # 1011 缺少 '=' <br />error # 1012 缺少 'If' <br />error # 1013 缺少 'To' <br />error # 1014 缺少 'End' <br />error # 1015 缺少 'Function' <br />error # 1016 缺少 'Sub' <br />error # 1017 缺少 'Then' <br />error # 1018 缺少 'Wend' <br />error # 1019 缺少 'Loop' <br />error # 1020 缺少 'Next' <br />error # 1021 缺少 'Case' <br />error # 1022 缺少 'Select' <br />error # 1023 缺少表达式 <br />error # 1024 缺少语句 <br />error # 1025 语句未结束 <br />error # 1026 缺少整型常数 <br />error # 1027 缺少 'While' 或 'Until' <br />error # 1028 缺少 'While' 和 'Until'或语句未结束 <br />error # 1029 缺少 'With' <br />error # 1030 标识符过长 <br />error # 1031 无效数字 <br />error # 1032 无效字符 <br />error # 1033 未结束的字符串常量 <br />error # 1034 注释未结束 <br />error # 1037 无效使用 'Me' 关键字 <br />error # 1038 'loop' 语句缺少 'do' <br />error # 1039 无效的 'exit' 语句 <br />error # 1040 循环控制变量 'for' 无效 <br />error # 1041 名称重定义 <br />error # 1042 必须是行中的第一个语句 <br />error # 1043 不能为 non-ByVal 参数赋值 <br />error # 1044 调用子程序时不能使用括号 <br />error # 1045 缺少文字常数 <br />error # 1046 缺少 'In' <br />error # 1047 缺少 'Class' <br />error # 1048 必须在一个类的内部定义 <br />error # 1049 在属性声明中缺少 Let , Set 或 Get <br />error # 1050 缺少 'Property' <br />error # 1051 在所有属性的规范中，变量的数目必须一致 <br />error # 1052 在一个类中不允许有多个缺省的属性/方法 <br />error # 1053 类的初始化或终止程序没有变量 <br />error # 1054 属性的 set 或 let 必须至少有一个变量 <br />error # 1055 错误的 'Next' <br />error # 1056 'Default' 只能在 'Property' , 'Function' 或 'Sub' 中指定 <br />error # 1057 指定 'Default' 时必须同时指定 'Public' <br />error # 1058 只能在 Property Get 中指定 'Default' <br />error # 4096 Microsoft VBScript 编译器错误 <br />error # 4097 Microsoft VBScript 运行时错误 <br />error # 5016 缺少正则表达式对象 <br />error # 5017 正则表达式语法错误 <br />error # 5018 错误的数量词 <br />error # 5019 正则表达式中缺少 ']' <br />error # 5020 正则表达式中缺少 ')' <br />error # 5021 字符集越界 <br />树形菜单:<br /><font face="新宋体">＜SCRIPT language="JavaScript"＞ <br />var lastObj <br />function expandIt(obj) <br />{ <br />if(lastObj != null) <br />{ <br />if(obj == lastObj) <br />{ <br />if(obj.style.display == "none") <br />{ <br />obj.style.display = ""; <br />} <br />else <br />{ <br />obj.style.display = "none" <br />} <br />} <br />else <br />{ <br />lastObj.style.display = "none"; <br />obj.style.display = ""; <br />} <br />} <br />else <br />{ <br />obj.style.display = ""; <br />} <br />lastObj = obj <br />} <br />＜/SCRIPT＞ <br />＜table width="100%" border="0" cellspacing="0" cellpadding="0"＞ <br />＜% <br />dim id <br />id = request("id") <br />dim strsql,rs <br />strsql="select * from p_type where slanguage=1 and typelevel=1 order by typename" <br />set rs=fgetrslist(strsql) <br />do while not rs.eof <br />%＞ <br />＜tr＞ <br />＜td height="25" class="LEFTLINKS"＞＜img width="30" height="0" align="absmiddle" /＞＜b＞＜%if rs("isleaf")=0 then%＞＜a href="#" id")%＞);return false"＞＜%else%＞＜a href="＜%=request.ServerVariables("SCRIPT_NAME")%＞?idtree=＜%=rs("idtree")%＞" ＞＜%end if%＞＜%=server.HTMLEncode(right((rs("typename")&amp;""),len(rs("typename")&amp;"")-2))%＞＜/a＞＜/b＞＜/td＞ <br />＜/tr＞ <br />＜% <br />IF clng(id)=clng(rs("id")) then <br />%＞ <br />＜tr id="kb＜%=rs("id")%＞"＞ <br />＜% <br />else <br />%＞ <br />＜tr id="kb＜%=rs("id")%＞" style="display:none;"＞ <br />＜% <br />end if <br />%＞ <br />＜td＞ <br />＜table＞ <br />＜% <br />dim rs1 <br />strsql="select * from p_type where parentid="&amp;rs("id")&amp;" and slanguage=1 order by typename" <br />set rs1=fgetrslist(strsql) <br />do while not rs1.eof <br />%＞ <br />＜tr＞＜td height="20" class="LEFTLINKS"＞ <br />＜img width="40" height="0" align="absmiddle" /＞＜a href="＜%=request.ServerVariables("SCRIPT_NAME")%＞?idtree=＜%=rs1("idtree")%＞&amp;id=＜%=rs("id")%＞" ＞＜%=server.HTMLEncode(right((rs1("typename")&amp;""),len(rs1("typename")&amp;"")-2))%＞＜/a＞＜/td＞＜/tr＞ <br />＜% <br />rs1.movenext <br />loop <br />rs1.close <br />set rs1=nothing <br />%＞ <br />＜/table＞ <br />＜/td＞ <br />＜/tr＞ <br />＜% <br />rs.movenext <br />loop <br />rs.close <br />set rs=nothing <br />%＞ <br />＜/table＞ <br /><br /><br /><table class="t_msg" cellspacing="0" cellpadding="4" border="0"><tbody><tr><td class="line" style="PADDING-TOP: 10px" valign="top" height="100%"><a title="评分 0" href="http://bbs.hackbase.com/misc.php?action=viewratings&amp;tid=3048181&amp;pid=4076929" name="pid4076929"></a><span class="bold">第四课.ASP文件中的安全问题</span><br /><br /><div style="FONT-SIZE: 11px"><b>ASP中可能有哪些安全问题？<br /></b>ASP具有简单、易用、多功能，可扩充性等强大功能，但也存在一些问题。譬如，如果使用ASP的话，可能会导致网络的安全性大大降低了！下面为大家举一个例子，请按照下面的步骤： <br />（1）从http：//home.gbsource.net/xuankong/dll.zip下载这个文件，解压缩后把其中的test.dll文件拷贝到c：\windows\system（如果你使用的是NT的话，请拷贝到相应的目录中）；<br />（2）接下来打开"开始/运行"菜单输入"regsvr32 test.dll"命令；<br />（3）拷贝解压后的文件包中的那个index.asp到你的服务器目录（如果你使用的是PWS调试可以拷贝到"c:\inetpub\wwwroot"，NT请拷贝到相应的目录）；<br />（4）换一台机器用IE浏览index.asp文件看一看（你看到的是出错代码，但是实际上程序已经运行了），你再返回你的机器看一看c:\下面是不是多了一个文件？一个名为xuankong.dat的文件（其实如果我愿意，你的c:\autoexec.bat文件页可以被我打开并写进去一些像"format c:/q/u"等命令，那么等你下次重新启动的时候，结果就不言自明了）。<br /><b>ASP页面的安全问题是如何产生的？<br /></b><br />下面我们来看一下到底是怎么回事，你刚才拷贝的那些dll文件其实是我使用Visul Basic5开发的一个主件，这个文件是通过以下步骤产生的：<br />（1）打开VB5新建一个"ActiveX.dll"文件，吧下面的代码输入进去：<br />Private Declare Function ExitWindowsEx Lib "user32"_(ByVal uFlags As Long,ByVal dwReserved As Long)_As LongSub Xuankong ( ) "请不要加上"private"a$ = InputBox ("请输入你的姓名，如果你输入的是"xuankong""+Chr(13)+Chr(10)+"则会在你的系统中生成一个"xuankong"文件"+Chr(10)+Chr(13)+"否则你的机器可能会重起","请输入","xuankong")If a$ = "xuankong" ThenOpen "c:\xuankong.dat" For Append As #Write#1,"我的朋友，这是一个asp主件测试程序"#Write#1,"hello world!this is a test"#Write#1,"如果你看到这个文件测试就成功！"elseExitWindowsEx&amp;H43,0使用API函数重新启动机器End ifClose #1End sub<br />（2）把工程名改为dll，类模块改为test，然后把这个工程生成dll文件到c:\windows\system目录下面。<br />（3）新建一个index.asp文件下面的代码输入进去：<br />＜html＞ ＜/html＞<br />（4）拷贝index.asp到你的服务器内，按照上面的方法调试！<br /><b>总结：</b><br />上面所说的是ASP主件的安全问题！另外如果有些作者再写ASP主件的时候不小心留下系统bug！那就更加不容易发现了！也可能会带来意想不到的问题。</div></td></tr><tr><td valign="bottom"><br /></td></tr></tbody></table><br /><span class="bold">第五课.关于如何保障Winnt +asp +sql web站点的安全经验</span><br /><br /><div style="FONT-SIZE: 11px">以下是我的一些经验，希望对你有用，但你要知道，绝对的安全是没有的。这才是一个网管存在的理由。所以。未雨绸缪是件好事。但亡羊补牢也不是下策。 <br /><br />请看我的经验： <br /><br />1。多看看ms的安全公告，这是首选。订阅安全技术杂志。（MS免费的！）如果是正版的nt，则会有最新的安全E-mail。保证及时更新。 <br /><br />2。多大补丁，一定要注意顺序，如果安装了系统软件，则还要重补。（如后面加上了smtp服务，则还要重补sp1等等，否则可能导致旧文件不会被覆盖）。 <br /><br />3。提高安全策略，也可以用微软的安全模板。有一些很好的自动模板。可以根据需要自动加上。 <br /><br />4。加大审核力度，审核权限比较大的操作。 <br /><br />5。密码按时更改。必须符合策略。 <br /><br />6。常上一些安全论坛。如：绿盟科技，妖狐站点。 <br /><br />7。账号的级别一定要多分一些，如果可一实现功能，就不要给更大权限。 <br /><br />8。去掉多余的服务。如:(ftp，smtp,nntp,telnet）多余的脚本，例子。如IIS中好多的脚本库，都可以不要。 <br /><br />9。去掉一些危险的命令。不要共享c盘。 <br /><br />10。常看看日志，事件。 <br /><br />11。不要安装html的远端管理。 <br /><br />12。最好安装一些黑客工具，模拟攻击。看看是否出了问题。 <br /><br />13。安装端口扫描工具。看看是否有些不用的开放端口。 <br /><br />14。安装一些防止窃听的工具，去除一些隐藏在端口的sniffer，防止密码数据被截获。 <br /><br />15。远程管理时最好调试端管理。密码加密策略高一些。防止被截获。 <br /><br />16。用注册表修改掉某些选项。如自动显示最后一个登录着的姓名。 <br /><br />17。改掉administrator的缺省姓名。这样可以多一级保护！ <br /><br />18。密码策略 <br /><br />19。密码的安全策略。多少位的密码是安全的。这个很怪。按照ms的加密算法。只有14位以上的密码是可能安全的。但实际上很少有人能记住那么多位的密码。但14位一下。7位密码比较安全。（很怪吧。）微软工程师说有时7位比10位还要保险。呵呵，具体原因说起来比较复杂。我是给我老弟讲课的。省略吧。 <br /><br />20。建议密码有字母。数字。大小写组成。最好加上一些如！·#￥%（）等的字符。也很难被猜到。 <br /><br />21。用户名改掉缺省的admini.....后，可以建一个14位长的管理员名。可以全部用字母。这样就加大了一级保护。 <br /><br />22。加大策略。防止用枚举法猜出账号名。 <br /><br />23。加入防止5次登录失败后，自动锁定账号20分中。防止暴力法突破。 <br /><br />24。建立分类的密码策略。不要用一些内置账号。如“sa”。 <br /><br />25。将sa的密码加大。最好不要常用他。建一个另外的管理员账号。然后对每一个自建的数据库都建一个分类账号。asp中最好用他来连接。这样就可以保障其他数据库的安全。 <br /><br />26。去掉一些权限。不允许普通用户用比较危险的存储过程。 <br /><br />27。不允许除管理员外的账号远程连接。或是加上命名管道。 <br /><br />27。asp如果能用dsn，就不要用连接字符串。并采取包含文件的模式包含进来。<br /><br /><span class="bold">第六课.Web程序中网页间数据传递方法小结</span><br /><br /><div style="FONT-SIZE: 11px">介绍 <br /><br />我们总是会遇到这样的情况，需要将数值从一个网页传递到另一个网页。在这篇文章中，向你展示了几种从一个网页向另一个网页传递数值的几种方法。在此例子中，创建的网页由一个文本控件和几个按钮控件组成。在文本框中输入的数据通过被标识在按钮控件中的不同方法从一个网页传递到另一个网页。 <br /><br />Response.Redirect <br /><br />让我们首先看一看如何使用Response.Redirect方法传递数据。这是它们之中最简单的方法。在文本框中输入一些数据，并且当你输入完成数据后，按下“Respose.Redirect”按钮。我们会得到一个提示，有时我们想在catch程序中传递另一个网页，意味着捕捉到例外程序并且向另一个网页传递。如果你试图这样做，它会给你一个System.Threading例外程序。因为你想遗留下一个线程向另一个网页传递数据，所以这个例外程序就会被抛出。 <br /><br />Response.Redirect("WebForm5.aspx",false); <br /><br />这个语句告诉编译器定位到“WebForm5.aspx”，这里的“false”意味着在当前网页不能结束你正在做的事情。应该看一看线程发布命令的System.Threading类。在下面，看一看按钮事件的C#代码。“txtName”文本控件的名字，文本框的内的值传递到一个叫做“WebForm5.aspx”的网页。在“？”之后的“Name”符号只是一个临时的响应变量，这个变量保持着文本的数值。 <br /><br />private void Button1_Click(object sender, System.EventArgs e) <br /><br />{ <br /><br />// Value sent using HttpResponse <br /><br />Response.Redirect("WebForm5.aspx?Name="+txtName.Text); <br /><br />} <br /><br />好的，到这种观点为止，你使用Response发送了数值。刚刚，在此我收集到了这些数值，所以在“WebForm5.aspx”page_Load事件中，写入这些代码。首先，我们检查到输入的值不为null。如果不是这样，我们只是简单地在网页上使用Label控件显示数值。注意：如果你使用Response.Redirect方法来传递这些数值，所有这些数值在浏览器的URL中都是不可见的。你绝不能使用Response.Redirect来传递信用证号码和机密信息。 <br /><br />if (Request.QueryString["Name"]!= null) <br /><br />Label3.Text = Request.QueryString["Name"]; <br /><br />Cookies <br /><br />接下来使用Cookies。Cookies在服务器端创建，但是客户端省略。在此 “Cookies” 按钮的click事件中，写入以下代码： <br /><br />HttpCookie cName = new HttpCookie("Name"); <br /><br />cName.Value = txtName.Text; <br /><br />Response.Cookies.Add(cName); <br /><br />Response.Redirect("WebForm5.aspx"); <br /><br />首先，创建一个cookie命名为“cName”。既然一个cookie实例可以拥有许多数值，告诉编译器这个cookie持有“Name”数值。我们将它赋值给TextBox并且最结后将它加入Response流，再使用Response.Redirect方法传递给其它网页。 <br /><br />让我们看一看如何得到被另一个网页传递的cookie数值。 <br /><br />if (Request.Cookies["Name"] != null ) <br /><br />Label3.Text = Request.Cookies["Name"].Value; <br /><br />如你所看到的，象我们以前做一的一样正是使用同一种方法，刚刚我们在Request.QueryString之内，使用了Request.Cookies。记注一些浏览器不接收cookies。 <br /><br /><b>Session Variables</b><br />接下来我们看一看session变量，这些变量由服务器来处理。第一个响影一从客户端传递到服务器，Sessions就创建了，并且当用户关闭浏览器窗口或者一些异常操作发生，session就会结束。给你一些可以使用session变量来传递数值的方法。在下面你看到为用户创建的Session和 “Name”是关键字，也如知名的Session关键字一样，关键字被赋给TextBox数值。 <br />// Session Created <br />Session["Name"] = txtName.Text; <br />Response.Redirect("WebForm5.aspx"); <br />// The code below shows how to get the session value. <br />// This code must be placed in other page. <br />if(Session["Name"] != null) <br />Label3.Text = Session["Name"].ToString(); <br />Application Variables <br />有时，我们需要存取来自网页任何地方的数值。因为那样，可以使用Application变量。这里有一小段代码，这段代码显示如何做到那些事情。一旦创建Application变量并且为其赋值，在应用程序的任何地方都可以重新得到它的值。 <br />// This sets the value of the Application Variable <br />Application["Name"] = txtName.Text; <br />Response.Redirect("WebForm5.aspx"); <br />// This is how we retrieve the value of the Application Variable <br />if( Application["Name"] != null ) <br />Label3.Text = Application["Name"].ToString(); <br /><b>HttpContext</b><br />可以使用HttpContext从网页中重新得到数值。通过使用方法的属性获得那些数值。既然它们易于编写代码和修改，使用属性是一种好方法。在你的第一个网页中，制造一个属性，这个属性可以返回TextBox的值。 <br />public string GetName <br />{ <br />get { return txtName.Text; } <br />} <br />我们使用Server.Transfer来将此控件发送到一个新网页。注意：Server.Transfer仅仅将此控件传递到新的网页并且不重新定位该网页，这意味着你会看到在URL中旧网页的地址。简单地在“Server.Transfer”按钮单击事件，并且增加下列代码。 <br />Server.Transfer("WebForm5.aspx"); <br />现在，让我们定位网页，数值就传递到该网页上，在这种情况下使用的该网页是“webForm5.aspx”。 <br />// You can declare this Globally or in any event you like <br />WebForm4 w; <br />// Gets the Page.Context which is Associated with this page <br />w = (WebForm4)Context.Handler; <br />// Assign the Label control with the property "GetName" which returns string <br />Label3.Text = w.GetName; <br />Special Note <br />特别注意 与你看到的一样，从一个网页向别一网页传递数值时有不同的方法。每一个方法有它自己的优点也有其缺点。所以，当你传递数值时，选择好你所需要的所以你就会有一种好方法，这种方法对你是最为可行的。</div></div></font></div>
		</div>
<img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-16 21:04 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp优化</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24142.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Fri, 16 Mar 2007 13:03:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24142.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24142.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24142.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24142.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第一课.Asp编码优化技巧8则						ASP(Active Server Page)是Microsoft公司推出的基于PWS(Personal Web Server)&amp;IIS(Internet Information Server)平台的、基于ISAPI(InternetServiceAPI)原理的动态网页开发技术，目前日趋成熟完善。在这里仅就代码优化进行一些简单讨论。 1...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24142.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-16 21:03 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp网络编程</title><link>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24141.html</link><dc:creator>求勿求</dc:creator><author>求勿求</author><pubDate>Fri, 16 Mar 2007 13:00:00 GMT</pubDate><guid>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24141.html</guid><wfw:comment>http://www.cnitblog.com/qiuwuqiu/comments/24141.html</wfw:comment><comments>http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qiuwuqiu/comments/commentRss/24141.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qiuwuqiu/services/trackbacks/24141.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第一课.用ASP编程实现网络内容快速查找						有一天我突发奇想，要是我每到一个网站，那里都能立刻调出我需要看的信息，那岂非美妙得很。接下来我想更深入地考虑这个问题，坐到椅子上拿一支铅笔，却不知道自己写什么。如此一来，我还是得着手对付代码它们。 我的朋友开了一个小型站点，原本是我设计的。这是个检验我想法的好平台。所以我写出代码，上传了文件。真叫人兴奋，程序工作起来煞是圆满，同时...&nbsp;&nbsp;<a href='http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24141.html'>阅读全文</a><img src ="http://www.cnitblog.com/qiuwuqiu/aggbug/24141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qiuwuqiu/" target="_blank">求勿求</a> 2007-03-16 21:00 <a href="http://www.cnitblog.com/qiuwuqiu/archive/2007/03/16/24141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>