<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Yao,Mane</title><subtitle type="text">I think ,therefore I am!--René Descartes</subtitle><id>http://feed.cnblogs.com/blog/u/73809/rss</id><updated>2012-06-01T04:48:37Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/73809/rss"/><entry><id>http://www.cnblogs.com/mane/archive/2012/05/22/2512879.html</id><title type="text">.NET 中 Image 转 Icon[转]</title><summary type="text">时候我们需要在内存中转换Image格式到Icon根据经验，通常我们应该可以这样做Image image = xxxx;///假设这里已经有一个Image对象 System.IO.MemoryStream mStream = new System.IO.MemoryStream();///创建内存流 image.Save(mStream, System.Drawing.Imaging.ImageFormat.Icon); Icon icon = Icon.FromHandle(new Bitmap(mStream).GetHicon())； mStream.Close(); 但这里在image.</summary><published>2012-05-22T02:28:00Z</published><updated>2012-05-22T02:28:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2012/05/22/2512879.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2012/05/22/2512879.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;时候我们需要在内存中转换Image格式到Icon&amp;nbsp;&lt;br /&gt;根据经验，通常我们应该可以这样做&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Image image = xxxx;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;假设这里已经有一个Image对象 &lt;/span&gt;&lt;br/&gt;System.IO.MemoryStream mStream = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.IO.MemoryStream();&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建内存流 &lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;image.Save(mStream, System.Drawing.Imaging.ImageFormat.Icon); &lt;br/&gt;Icon icon &lt;/span&gt;= Icon.FromHandle(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Bitmap(mStream).GetHicon())； &lt;br/&gt;mStream.Close(); &lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;但这里在image.Save的时候会报告错误，空对象引用。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;于是我改变保存的格式为Bitmap、Jpeg等，这样就没有错误了（说明不能在内存中直接保存为Icon格式）。&amp;nbsp;&lt;br /&gt;但是这样的话，取得的Icon将会去掉原图片中的透明信息。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;一个个格式的试验我们可以发现保存为Gif格式的时候，还可以保留透明信息，哈哈，终于找到，&amp;nbsp;&lt;br /&gt;但这里，还有值得注意的就是，在成功取得内存流后，不能直接用Icon构造，一定要用Bitmap转，否则也会报错。&amp;nbsp;&lt;br /&gt;Icon icon = new Icon(mStream);//这种方式将报错&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;转自：&lt;a href="http://blog.csdn.net/21aspnet/article/details/1539796"&gt;http://blog.csdn.net/21aspnet/article/details/1539796&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2512879.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2012/05/22/2512879.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mane/archive/2012/05/08/2489842.html</id><title type="text">把程序注册到系统右键菜单，并获取打开的文件地址信息。</title><summary type="text">/// &lt;summary&gt; /// 启动程序 /// &lt;/summary&gt; /// &lt;param name="sender"&gt;&lt;/param&gt; /// &lt;param name="e"&gt;&lt;/param&gt; private void Main_Load(object sender, EventArgs e) { try { //获取传递的地址信息 string paramStr = Environ...</summary><published>2012-05-08T03:47:00Z</published><updated>2012-05-08T03:47:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2012/05/08/2489842.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2012/05/08/2489842.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #808080;"&gt;         ///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 启动程序&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="sender"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="e"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main_Load(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取传递的地址信息&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; paramStr = Environment.CommandLine;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;接收点击右键菜单传递的文件地址参数&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; personalFolderPath = paramStr.Substring(paramStr.LastIndexOf(&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;)+&lt;span style="color: #800080;"&gt;1&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取文件路径&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            { }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;注册系统右键菜单&lt;/span&gt;&lt;br/&gt;                MenuRight(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;用G-ZIP压缩/解压当前选择项(Z)......&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 注册启动程序到系统菜单右键方法&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="menuName"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;菜单名&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; MenuRight(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; menuName)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;注册到文件&lt;/span&gt;&lt;br/&gt;            RegistryKey shell1 = Registry.ClassesRoot.CreateSubKey(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;*\shell&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            RegistryKey custom1 &lt;/span&gt;=&lt;span style="color: #000000;"&gt; shell1.CreateSubKey(menuName);&lt;br/&gt;            RegistryKey cmd1 &lt;/span&gt;= custom1.CreateSubKey(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;command&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            cmd1.SetValue(&lt;/span&gt;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;, Application.ExecutablePath + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; %1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Application.ExecutablePath 是本程序自身的路径  %1是传入打开的文件路径&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            cmd1.Close();&lt;br/&gt;            custom1.Close();&lt;br/&gt;            shell1.Close();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;注册到目录&lt;/span&gt;&lt;br/&gt;            RegistryKey shell = Registry.ClassesRoot.CreateSubKey(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;directory\shell&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            RegistryKey custom &lt;/span&gt;=&lt;span style="color: #000000;"&gt; shell.CreateSubKey(menuName);&lt;br/&gt;            RegistryKey cmd &lt;/span&gt;= custom.CreateSubKey(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;command&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            cmd.SetValue(&lt;/span&gt;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;, Application.ExecutablePath + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt; %1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;); &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;%1 是传入打开的文件路径&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            cmd.Close();&lt;br/&gt;            custom.Close();&lt;br/&gt;            shell.Close();&lt;br/&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2489842.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2012/05/08/2489842.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mane/archive/2012/05/02/2478836.html</id><title type="text">使用GZipStream类压缩和解压文件夹 [转]</title><summary type="text">因为要求的压缩和解压非常简单，只有一级目录，而且文件很小，就没有使用SharpZipLib而是自己用.Net 2.0中的GZipStream类写了个简单的。将保存每个文件内容的byte数组和文件名的一个类型的示例放入arraylist里，再对其序列化，压缩序列化的流并保存为压缩包。其实对于多级目录在压缩时对其文件进行递归并在解压时根据文件名称和路径重新构建文件目录就也可以实现了。using System;using System.Text;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatte</summary><published>2012-05-02T04:51:00Z</published><updated>2012-05-02T04:51:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2012/05/02/2478836.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2012/05/02/2478836.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12px; font-family: 宋体;"&gt;因为要求的压缩和解压非常简单，只有一级目录，而且文件很小，就没有使用SharpZipLib而是自己用.Net 2.0中的GZipStream类写了个简单的。将保存每个文件内容的byte数组和文件名的一个类型的示例放入arraylist里，再对其序列化，压缩序列化的流并保存为压缩包。其实对于多级目录在压缩时对其文件进行递归并在解压时根据文件名称和路径重新构建文件目录就也可以实现了。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Text;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Runtime.Serialization;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Runtime.Serialization.Formatters.Binary;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.IO;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.IO.Compression;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; GreatCHN.GZipCompression&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; GZipCompress&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 对目标文件夹进行压缩，将压缩结果保存为指定文件&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="dirPath"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;目标文件夹&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="fileName"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;压缩文件&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&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;void&lt;/span&gt; Compress(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; dirPath, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; fileName)&lt;br/&gt;        {&lt;br/&gt;            ArrayList list &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ArrayList();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; f &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; Directory.GetFiles(dirPath))&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] destBuffer =&lt;span style="color: #000000;"&gt; File.ReadAllBytes(f);&lt;br/&gt;                SerializeFileInfo sfi &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SerializeFileInfo(f, destBuffer);&lt;br/&gt;                list.Add(sfi);&lt;br/&gt;            }&lt;br/&gt;            IFormatter formatter &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; BinaryFormatter();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (Stream s = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; MemoryStream())&lt;br/&gt;            {&lt;br/&gt;                formatter.Serialize(s, list);&lt;br/&gt;                s.Position &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                CreateCompressFile(s, fileName);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 对目标压缩文件解压缩，将内容解压缩到指定文件夹&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="fileName"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;压缩文件&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="dirPath"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;解压缩目录&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&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;void&lt;/span&gt; DeCompress(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; fileName, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; dirPath)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (Stream source =&lt;span style="color: #000000;"&gt; File.OpenRead(fileName))&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (Stream destination = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; MemoryStream())&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (GZipStream input = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GZipStream(source, CompressionMode.Decompress, &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br/&gt;                    {&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] bytes = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[&lt;span style="color: #800080;"&gt;4096&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; n;&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; ((n = input.Read(bytes, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, bytes.Length)) != &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                        {&lt;br/&gt;                            destination.Write(bytes, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, n);&lt;br/&gt;                        }&lt;br/&gt;                    }&lt;br/&gt;                    destination.Flush();&lt;br/&gt;                    destination.Position &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                    DeSerializeFiles(destination, dirPath);&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&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;void&lt;/span&gt; DeSerializeFiles(Stream s, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; dirPath)&lt;br/&gt;        {&lt;br/&gt;            BinaryFormatter b &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; BinaryFormatter();&lt;br/&gt;            ArrayList list &lt;/span&gt;=&lt;span style="color: #000000;"&gt; (ArrayList)b.Deserialize(s);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (SerializeFileInfo f &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; list)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; newName = dirPath +&lt;span style="color: #000000;"&gt; Path.GetFileName(f.FileName);&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (FileStream fs = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; FileStream(newName, FileMode.Create, FileAccess.Write))&lt;br/&gt;                {&lt;br/&gt;                    fs.Write(f.FileBuffer, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, f.FileBuffer.Length);&lt;br/&gt;                    fs.Close();&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&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;void&lt;/span&gt; CreateCompressFile(Stream source, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; destinationName)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (Stream destination = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; FileStream(destinationName, FileMode.Create, FileAccess.Write))&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (GZipStream output = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; GZipStream(destination, CompressionMode.Compress))&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] bytes = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[&lt;span style="color: #800080;"&gt;4096&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; n;&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; ((n = source.Read(bytes, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, bytes.Length)) != &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                    {&lt;br/&gt;                        output.Write(bytes, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, n);&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        [Serializable]&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; SerializeFileInfo&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; SerializeFileInfo(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; name, &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] buffer)&lt;br/&gt;            {&lt;br/&gt;                fileName &lt;/span&gt;=&lt;span style="color: #000000;"&gt; name;&lt;br/&gt;                fileBuffer &lt;/span&gt;=&lt;span style="color: #000000;"&gt; buffer;&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; fileName;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; FileName&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; fileName;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] fileBuffer;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] FileBuffer&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; fileBuffer;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12px; font-family: 宋体;"&gt;在System.IO.Compress命名空间下还有一个DeflateStream类，它使用Deflate 算法来进行压缩和解压，它和GZipStream的工作方式是一样的。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px; font-family: 宋体;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2478836.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2012/05/02/2478836.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mane/archive/2012/04/14/2446747.html</id><title type="text">C#基础--可以快速理解事件机制的事件示例</title><summary type="text">using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace EvenDemo{ /// &lt;summary&gt; /// 事件参数类，继承自EventArgs，包含事件信息 /// &lt;/summary&gt; public class DoorInfoEventArgs : EventArgs { /// &lt;summary&gt; /// 显示门状态信息 /// &lt;/summary&gt; public str...</summary><published>2012-04-14T01:11:00Z</published><updated>2012-04-14T01:11:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2012/04/14/2446747.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2012/04/14/2446747.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Collections.Generic;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Linq;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Text;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; EvenDemo&lt;br/&gt;{&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 事件参数类，继承自EventArgs，包含事件信息&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; DoorInfoEventArgs : EventArgs&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 显示门状态信息&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; doorInfo;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 构造函数&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="isOpen"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;是否打开门，true/false&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; DoorInfoEventArgs(&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; isOpen)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (isOpen)&lt;br/&gt;            {&lt;br/&gt;                doorInfo &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;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                doorInfo &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;            }&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 定义门代理&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="sender"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="e"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;事件信息&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OpenDoorEventHandler(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, DoorInfoEventArgs e);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 事件类&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; CommandDoor&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 定义事件(即：创建代理对象)&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;event&lt;/span&gt;&lt;span style="color: #000000;"&gt; OpenDoorEventHandler openDoor;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 定义触发事件的属性&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; IsOpen&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;            {&lt;br/&gt;                DoorInfoEventArgs myEven &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DoorInfoEventArgs(value);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;事件参数&lt;/span&gt;&lt;br/&gt;                openDoor(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;, myEven);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;调用事件代理&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            }&lt;br/&gt;        }&lt;br/&gt; &lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Program&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&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;&lt;span style="color: #000000;"&gt;[] args)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建事件对象，并添加事件实现代理的实例化&lt;/span&gt;&lt;br/&gt;            CommandDoor commandDoor = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; CommandDoor();&lt;br/&gt;            commandDoor.openDoor &lt;/span&gt;+= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; OpenDoorEventHandler(Door);&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;由设置属性的值触发事件&lt;/span&gt;&lt;br/&gt;            Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;是否打开门？Y/N&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;char&lt;/span&gt; commandChar =(&lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt;) Console.Read();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (commandChar == &lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Y&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                commandDoor.IsOpen &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                commandDoor.IsOpen &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            }&lt;br/&gt;            Console.ReadKey();&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 事件执行的方法&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="source"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="e"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&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;void&lt;/span&gt; Door(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; source, DoorInfoEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            Console.WriteLine(e.doorInfo);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2446747.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2012/04/14/2446747.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mane/archive/2012/04/13/2446244.html</id><title type="text">2010 .NET面试题整理之基础篇[转]</title><summary type="text">1、什么是面向对象面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP；通俗的解释就是万物皆对象，把所有的事物都看作一个个可以独立的对象(单元)，它们可以自己完成自己的功能，而不是像C那样分成一个个函数；现在纯正的OO语言主要是java和C#，C++也支持OO，C是面向过程的。2、简述 private、 protected、 public、 internal 修饰符的访问权限。private : 私有成员, 在类的内部才可以访问。protected : 保护成员，该类内部和继承类中可以访问。public : 公共成员，完全公开，没有访问限制。 intern</summary><published>2012-04-13T10:47:00Z</published><updated>2012-04-13T10:47:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2012/04/13/2446244.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2012/04/13/2446244.html"/><content type="html">&lt;p&gt;&lt;strong&gt;1、什么是面向对象&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP；&lt;br /&gt;通俗的解释就是万物皆对象，把所有的事物都看作一个个可以独立的对象(单元)，它们可以自己完成自己的功能，而不是像C那样分成一个个函数；&lt;br /&gt;现在纯正的OO语言主要是java和C#，C++也支持OO，C是面向过程的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2、简述 private、 protected、 public、 internal 修饰符的访问权限。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;private : 私有成员, 在类的内部才可以访问。&lt;br /&gt;protected : 保护成员，该类内部和继承类中可以访问。&lt;br /&gt;public : 公共成员，完全公开，没有访问限制。 &lt;br /&gt;internal: 当前程序集内可以访问。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3、ADO.NET中的五个主要对象&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Connection：主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开，是无法从数据库中取得数据的。这个物件在ADO.NET 的最底层，我们可以自己产生这个对象，或是由其它的对象自动产生。&lt;br /&gt;Command：主要可以用来对数据库发出一些指令，例如可以对数据库下达查询、新增、修改、删除数据等指令，以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection 对象上，也就是Command 对象是透过连结到数据源。&lt;br /&gt;DataAdapter：主要是在数据源以及DataSet 之间执行数据传输的工作，它可以透过Command 对象下达命令后，并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上，并提供了许多配合DataSet 使用的功能。&lt;br /&gt;DataSet：这个对象可以视为一个暂存区（Cache），可以把从数据库中所查询到的数据保留起来，甚至可以将整个数据库显示出来。DataSet 的能力不只是可以储存多个Table 而已，还可以透过DataAdapter对象取得一些例如主键等的数据表结构，并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象，这个对象架构在DataAdapter对象上，本身不具备和数据源沟通的能力；也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。&lt;br /&gt;DataReader：当我们只需要循序的读取数据而不需要其它操作时，可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据，而且这些数据是只读的，并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔，而且只能只读，所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外，因为不用把数据全部传回，故可以降低网络的负载。&lt;br /&gt;ADO.NET 使用Connection 对象来连接数据库，使用Command 或DataAdapter对象来执行SQL语句，并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4、列举ASP.NET 页面之间传递值的几种方式。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.使用QueryString, 如....?id=1; response. Redirect().... &lt;br /&gt;2.使用Session变量 &lt;br /&gt;3.使用Server.Transfer&lt;br /&gt;4.Cookie传值&lt;br /&gt;5.Application传值&lt;br /&gt;6.文件存储&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5、C#中的委托是什么？事件是不是一种委托？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;委托可以把一个方法作为参数代入另一个方法。&lt;br /&gt;委托可以理解为指向一个函数的引用。&lt;br /&gt;是，是一种特殊的委托。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6、override与重载的区别&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;重载是方法的名称相同。参数或参数类型不同，进行多次重载以适应不同的需要 &lt;br /&gt;Override 是进行基类中函数的重写。为了适应需要。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;7、描述一下C#中索引器的实现过程，是否只能根据数字进行索引？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;不是。可以用任意类型。&lt;br /&gt;避免为索引器设置除 System.Int32、System.Int64、System.String、System.Object、枚举或泛型类型参数之外的其他参数类型。（谢谢17楼，吴峰 指出）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;8、三层架构&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;通常意义上的三层架构就是将整个业务应用划分为：表现层（UI）、业务逻辑层（BLL）、数据访问层（DAL）。&lt;br /&gt;区分层次的目的即为了&amp;ldquo;高内聚，低耦合&amp;rdquo;的思想。&lt;br /&gt;表现层（UI）：通俗讲就是展现给用户的界面，即用户在使用一个系统的时候的所见所得。&lt;br /&gt;业务逻辑层（BLL）：针对具体问题的操作，也可以说是对数据层的操作，对数据业务逻辑处理。&lt;br /&gt;数据访问层（DAL）：该层所做事务直接操作数据库，针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。&lt;br /&gt;三层结构是N层结构的一种，一般来说，层次之间是向下依赖的，下层代码未确定其接口（契约）前，上层代码是无法开发的，下层代码接口（契约）的变化将使上层的代码一起变化。&lt;br /&gt;优点： 分工明确，条理清晰，易于调试，而且具有可扩展性。 &lt;br /&gt;缺点： 增加成本。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;9、MVC模式&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;MVC(Model View Controller)模型－视图－控制器&lt;br /&gt;MVC是典型的平行关系，没有说谁在上谁在下的关系，模型负责业务领域的事情，视图负责显示的事情，控制器把数据读取出来填充模型后把模型交给视图去处理。而各种验证什么的应该是在模型里处理了。它强制性的使应用程序的输入、处理和输出分开。MVC最大的好处是将逻辑和页面分离。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;10、什么是装箱和拆箱？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;装箱：从值类型接口转换到引用类型。&lt;br /&gt;拆箱：从引用类型转换到值类型。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;11、什么叫应用程序域&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一种边界，它由公共语言运行库围绕同一应用程序范围内创建的对象建立（即，从应用程序入口点开始，沿着对象激活的序列的任何位置）。&lt;br /&gt;应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的对象隔离，以使运行时行为可以预知。&lt;br /&gt;在一个单独的进程中可以存在多个应用程序域。应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;12、CTS、CLS、CLR分别作何解释&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;CTS：Common Type System 通用系统类型。&lt;br /&gt;CLS：Common Language Specification 通用语言规范。&lt;br /&gt;CLR：Common Language Runtime 公共语言运行库。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;13、在dotnet中类(class)与结构(struct)的异同？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;相同点：语法类似&lt;br /&gt;不同点：&lt;br /&gt;1.class是引用类型，继承自System.Object类；struct是值类型，继承自System.ValueType类，因此不具多态性。但是注意，System.ValueType是个引用类型。 &lt;br /&gt;2.从职能观点来看，class表现为行为；而struct常用于存储数据。 &lt;br /&gt;3.class支持继承，可以继承自类和接口；而struct没有继承性，struct不能从class继承，也不能作为class的基类，但struct支持接口继承。 &lt;br /&gt;4.class可以声明无参构造函数，可以声明析构函数；而struct只能声明带参数构造函数，且不能声明析构函数。因此，struct没有自定义的默认无参构造函数，默认无参构造器只是简单地把所有值初始化为它们的0等价值。&lt;br /&gt;5.实例化时，class要使用new关键字；而struct可以不使用new关键字，如果不以new来实例化struct，则其所有的字段将处于未分配状态，直到所有字段完成初始化，否则引用未赋值的字段会导致编译错误。&lt;br /&gt;6.class可以是抽象类（abstract），可以声明抽象函数；而struct为抽象，也不能声明抽象函数。 &lt;br /&gt;7.class可以声明protected成员、virtual成员、sealed成员和override成员；而struct不可以，但是值得注意的是，struct可以重载System.Object的3个虚方法，Equals()、ToString()和GetHashTable()。 &lt;br /&gt;8.class的对象复制分为浅拷贝和深拷贝，必须经过特别的方法来完成复制；而struct创建的对象复制简单，可以直接以等号连接即可。 &lt;br /&gt;9.class实例由垃圾回收机制来保证内存的回收处理；而struct变量使用完后立即自动解除内存分配。 &lt;br /&gt;10.作为参数传递时，class变量是以按址方式传递；而struct变量是以按值方式传递的。&lt;/p&gt;&lt;p&gt;该答案转自：Anytao的&lt;a href="http://www.cnblogs.com/anytao/archive/2007/04/24/must_net_04.html" target="_blank"&gt;[你必须知道的.NET] 第四回：后来居上：class和struct&lt;/a&gt;&amp;nbsp; 关于类分配在堆上，结构分配在栈上 存在争议，这种说法应该指通常情况下&amp;nbsp; 另见 xiaotie的 &lt;a class="postTitle2" href="http://www.cnblogs.com/xiaotie/archive/2010/03/31/1701056.html" target="_blank"&gt;Struct与Class辨析&lt;/a&gt; ，谢谢指正&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;14、堆和栈的区别？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;栈是编译期间就分配好的内存空间，因此你的代码中必须就栈的大小有明确的定义；&lt;br /&gt;堆是程序运行期间动态分配的内存空间，你可以根据程序的运行情况确定要分配的堆内存的大小。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;15、能用foreach遍历访问的对象的要求&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;需要实现IEnumerable接口或声明GetEnumerator方法的类型。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;16、GC是什么? 为什么要有GC?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;GC是垃圾收集器。程序员不用担心内存管理，因为垃圾收集器会自动进行管理。&lt;br /&gt;要请求垃圾收集，可以调用下面的方法之一： System.gc()&amp;nbsp; Runtime.getRuntime().gc()&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;17、String s = new String("xyz");创建了几个String Object?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对于.NET来说该题是错误的，根本就没这样的构造函数。谢谢 37楼，赵伟&amp;nbsp; 43楼，DiggingDeeply 指正&lt;br /&gt;String a="xyz";首先会到常量池中去查找，如果存在就不再分配，如果不存在就分配，常量池中的数据是在编译期赋值的，也就是生成class文件时就把它放到常量池里了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;18、值类型和引用类型的区别？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.赋值方式不同：基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时，将复制包含的值。引用类型变量的赋值只复制对对象的引用，而不复制对象本身。&lt;br /&gt;2.值类型不可能派生出新的类型：所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是，结构也可以实现接口。&lt;br /&gt;3.值类型不可能包含 null 值：然而，可空类型功能允许将 null 赋给值类型。 &lt;br /&gt;4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;19、C#中的接口和类有什么异同。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;不同点：&lt;br /&gt;不能直接实例化接口。&lt;br /&gt;接口不包含方法的实现。&lt;br /&gt;接口可以多继承，类只能单继承。&lt;br /&gt;类定义可在不同的源文件之间进行拆分。&lt;br /&gt;相同点：&lt;br /&gt;接口、类和结构都可以从多个接口继承。&lt;br /&gt;接口类似于抽象基类：继承接口的任何非抽象类型都必须实现接口的所有成员。&lt;br /&gt;接口和类都可以包含事件、索引器、方法和属性。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;20、abstract class和interface有什么区别?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;相同点： &lt;br /&gt;都不能被直接实例化，都可以通过继承实现其抽象方法。 &lt;br /&gt;都是面向抽象编程的技术基础，实现了诸多的设计模式。&lt;br /&gt;不同点： &lt;br /&gt;接口支持多继承；抽象类不能实现多继承。 &lt;br /&gt;接口只能定义抽象规则；抽象类既可以定义规则，还可能提供已实现的成员。 &lt;br /&gt;接口是一组行为规范；抽象类是一个不完全的类，着重族的概念。 &lt;br /&gt;接口可以用于支持回调（CallBack）；抽象类不能实现回调，因为继承不支持。 &lt;br /&gt;接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名，但不能定义字段和包含实现的方法；&lt;br /&gt;抽象类可以定义字段、属性、包含有实现的方法。&amp;nbsp; &lt;br /&gt;接口可以作用于值类型(Struct)和引用类型(Class)；抽象类只能作用于引用类型。例如，Struct就可以继承接口，而不能继承类。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;21、sleep() 和 wait() 有什么区别?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;sleep()方法是将当前线程挂起指定的时间。&lt;br /&gt;wait()释放对象上的锁并阻塞当前线程，直到它重新获取该锁。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;22、是否可以继承String类?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;String类是sealed类故不可以继承。(.NET中没有final关键字，谢谢14楼&amp;nbsp;New.min&amp;nbsp;和15楼&amp;nbsp;&amp;nbsp;Duron800&amp;nbsp;指正)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;23、try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;会执行，在return前执行。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;24、new 关键字用法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;new 运算符 用于创建对象和调用构造函数。&lt;br /&gt;new 修饰符 用于向基类成员隐藏继承成员。&lt;br /&gt;new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。&lt;br /&gt;new实现多态&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;25、如何把一个Array复制到ArrayList里&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;实现1 string[] s ={ "111", "22222" }; ArrayList list = new ArrayList(); list.AddRange(s);&lt;br /&gt;实现2 string[] s ={ "111", "22222" }; ArrayList list = new ArrayList(s);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;26、DataGrid（GridView ,DataGridView）的Datasouse可以连接什么数据源&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;DataTable&lt;br /&gt;DataView&lt;br /&gt;DataSet&lt;br /&gt;DataViewManager&lt;br /&gt;任何实现IListSource接口的组件&lt;br /&gt;任何实现IList接口的组件&lt;br /&gt;&lt;span style="font-size: small;"&gt;注：&lt;/span&gt;&amp;nbsp;vs2005以后已经没有提供DataGrid这个控件了，但是DataGrid还是可以使用的，该问题同样适用于&lt;span style="font-size: small;"&gt;GridView ,DataGridView控件，谢谢 20楼 风海迷沙 指出&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;27、描述线程与进程的区别？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.线程(Thread)与进程（Process）二者都定义了某种边界，不同的是进程定义的是应用程序与应用程序之间的边界，不同的进程之间不能共享代码和数据空间，而线程定义的是代码执行堆栈和执行上下文的边界。&lt;br /&gt;2.一个进程可以包括若干个线程，同时创建多个线程来完成某项任务，便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说，如果一个家庭代表一个进程，在家庭内部，各个成员就是线程，家庭中的每个成员都有义务对家庭的财富进行积累，同时也有权利对家庭财富进行消费，当面对一个任务的时候，家庭也可以派出几个成员来协同完成，而家庭之外的人则没有办法直接消费不属于自己家庭的财产。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;28、什么是强类型，什么是弱类型？哪种更好些？为什么?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;强类型是在编译的时候就确定类型的数据，在执行时类型不能更改，而弱类型在执行的时候才会确定类型。&lt;br /&gt;没有好不好，二者各有好处，强类型安全，因为它事先已经确定好了，而且效率高。&lt;br /&gt;一般用于编译型编程语言，如c++,java,c#,pascal等,弱类型相比而言不安全，在运行的时候容易出现错误，但它灵活，多用于解释型编程语言，如javascript,vb等&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;29、什么是反射? &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;程序集包含模块，而模块又包括类型，类型下有成员，反射就是管理程序集，模块，类型的对象，它能够动态的创建类型的实例，设置现有对象的类型或者获取现有对象的类型，能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;30、DateTime是否可以为null?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;不能，因为其为Struct类型，而结构属于值类型，值类型不能为null,只有引用类型才能被赋值null&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;31、using() 语法有用吗？什么是IDisposable？它是如何实现确定性终结的&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;有用，实现了IDisposiable的类在using中创建，using结束后会自定调用该对象的Dispose方法，释放资源。不明白什么是确定性终结&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;32、Assembly.Load("foo.dll"); 这句话是否正确？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;错误，正确的应该是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll");&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;33、Session有什么重大BUG，微软提出了什么方法加以解决？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;是iis中由于有进程回收机制，系统繁忙的话Session会丢失，可以用Sate server或SQL Server数据库的方式存储Session，不过这种方式比较慢，而且无法捕获Session的END事件。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;34、XML 与 HTML 的主要区别&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1. XML是区分大小写字母的，HTML不区分。 &lt;br /&gt;2. 在HTML中，如果上下文清楚地显示出段落或者列表键在何处结尾，那么你可以省略&amp;lt;/p&amp;gt;或者&amp;lt;/li&amp;gt;之类的结束 标记。在XML中，绝对不能省略掉结束标记。 &lt;br /&gt;3. 在XML中，拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。 &lt;br /&gt;4. 在XML中，属性值必须分装在引号中。在HTML中，引号是可用可不用的。 &lt;br /&gt;5. 在HTML中，可以拥有不带值的属性名。在XML中，所有的属性都必须带有相应的值。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;35、重载与覆盖的区别？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1.方法的覆盖是子类和父类之间的关系，是垂直关系；方法的重载是同一个类中方法之间的关系，是水平关系&lt;br /&gt;2.覆盖只能由一个方法，或只能由一对方法产生关系；方法的重载是多个方法之间的关系。&lt;br /&gt;3.覆盖要求参数列表相同；重载要求参数列表不同。&lt;br /&gt;4.覆盖关系中，调用那个方法体，是根据对象的类型（对像对应存储空间类型）来决定；重载关系，是根据调 用时的实参表与形参表来选择方法体的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;36、请编程遍历页面上所有TextBox控件并给它赋值为string.Empty？&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;foreach&amp;nbsp;(System.Windows.Forms.Control&amp;nbsp;control&amp;nbsp;in&amp;nbsp;this.Controls)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(control&amp;nbsp;is&amp;nbsp;System.Windows.Forms.TextBox)&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;System.Windows.Forms.TextBox&amp;nbsp;tb&amp;nbsp;=&amp;nbsp;(System.Windows.Forms.TextBox)control;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tb.Text&amp;nbsp;=&amp;nbsp;String.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;37、根据线程安全的相关知识，分析以下代码，当调用test方法时i&amp;gt;10时是否会引起死锁?并说明理由。&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;public&amp;nbsp;void&amp;nbsp;test(int&amp;nbsp;i)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lock&amp;nbsp;(this)&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;if&amp;nbsp;(i&amp;nbsp;&amp;gt;&amp;nbsp;10)&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;i--;&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;test(i);&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;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;不会发生死锁，（但有一点int是按值传递的，所以每次改变的都只是一个副本，因此不会出现死锁。但如果把int换做一个object，那么死锁会发生）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;strong&gt;38、悲剧的冒泡&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;[] BubbleUp(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] arr)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; arr.Length; i++&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; j = i + &lt;span style="color: #800080;"&gt;1&lt;/span&gt;; j &amp;lt; arr.Length; j++&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (arr[i]&amp;gt;&lt;span style="color: #000000;"&gt; arr[j])&lt;br/&gt;                    {&lt;br/&gt;                        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; temp =&lt;span style="color: #000000;"&gt; arr[i];&lt;br/&gt;                        arr[i] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; arr[j];&lt;br/&gt;                        arr[j] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; temp;&lt;br/&gt;                    }&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; arr;&lt;br/&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2446244.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2012/04/13/2446244.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mane/archive/2012/04/13/2446242.html</id><title type="text">C#基础知识--匿名方法和Lambda</title><summary type="text">匿名方法匿名方法就是没有名字的方法（函数），既然没有名字，就是说只有在定义的时候能调用，在其他地方就不能调用了（没有名字啊，那就找不到嘛）。为什么要用到匿名方法呢？调用函数是需要花销的，但有时候调用的一些方法很短小（例如一句话方法）、只完成很少的功能，这个时候就有点得不偿失了，此时就可以定义一个匿名方法来完成这个功能了，而匿名方法作为内联代码，花销相对小很多。匿名方法都是和委托连在一起用的（以后还有lambda表达式），以前创建委托实例时需要传递一个函数名给它作为参数，现在可以通过匿名方法直接把一段代码传进去了定义匿名方法：用到delegate关键字，如：delegate(inta,intb)</summary><published>2012-04-13T10:46:00Z</published><updated>2012-04-13T10:46:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2012/04/13/2446242.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2012/04/13/2446242.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;匿名方法&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;匿名方法就是没有名字的方法（函数），既然没有名字，就是说只有在定义的时候能调用，在其他地方就不能调用了（没有名字啊，那就找不到嘛）。为什么要用到匿名方法呢？调用函数是需要花销的，但有时候调用的一些方法很短小（例如一句话方法）、只完成很少的功能，这个时候就有点得不偿失了，此时就可以定义一个匿名方法来完成这个功能了，而匿名方法作为内联代码，花销相对小很多。匿名方法都是和委托连在一起用的（以后还有lambda表达式），以前创建委托实例时需要传递一个函数名给它作为参数，现在可以通过匿名方法直接把一段代码传进去了&lt;br /&gt;定义匿名方法：用到delegate关键字，如：delegate(int&amp;nbsp;a,&amp;nbsp;int&amp;nbsp;b){return&amp;nbsp;a&amp;nbsp;&amp;gt;&amp;nbsp;b&amp;nbsp;?a&amp;nbsp;:&amp;nbsp;b&amp;nbsp;;}代码定义了一个匿名方法，该方法的参数是&amp;nbsp;int&amp;nbsp;a&amp;nbsp;和&amp;nbsp;int&amp;nbsp;b&amp;nbsp;，方法体是&amp;nbsp;{return&amp;nbsp;a&amp;nbsp;&amp;gt;&amp;nbsp;b&amp;nbsp;?&amp;nbsp;a&amp;nbsp;:&amp;nbsp;b}。如果只是定义一个匿名方法没有意义，因为定义完过后你就再也不能用这个匿名方法，所以匿名方法要在定义的时候就马上使用。一般来说就是初始化委托了。&lt;br /&gt;使用匿名方法：&lt;br /&gt;View&amp;nbsp;Code&lt;p&gt;&amp;nbsp;namespace&amp;nbsp;DelegateTest&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;class&amp;nbsp;Program&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;//创建委托类型&lt;/p&gt;&lt;p&gt;&amp;nbsp;delegate&amp;nbsp;int&amp;nbsp;Mydelegate(int&amp;nbsp;x,&amp;nbsp;int&amp;nbsp;y);&lt;/p&gt;&lt;p&gt;&amp;nbsp;static&amp;nbsp;void&amp;nbsp;Main(string[]&amp;nbsp;args)&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;//创建委托实例，指向匿名函数&lt;/p&gt;&lt;p&gt;&amp;nbsp;Mydelegate&amp;nbsp;mydelegate&amp;nbsp;=&amp;nbsp;delegate(int&amp;nbsp;x,int&amp;nbsp;y)&amp;nbsp;{&amp;nbsp;return&amp;nbsp;x&amp;nbsp;+&amp;nbsp;y;&amp;nbsp;};&lt;/p&gt;&lt;p&gt;&amp;nbsp;//通过委托调用匿名方法&lt;/p&gt;&lt;p&gt;&amp;nbsp;Console.WriteLine(mydelegate(3,2));&lt;/p&gt;&lt;p&gt;&amp;nbsp;Console.ReadKey();&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;总结：匿名方法就是没有名字的方法，只能通过委托来被调用（这句话可能有误，匿名方法也可以直接订阅事件作为事件处理函数，当事件发生时就接收相应参数并执行函数体）。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Lambda&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;上面说到可以通过匿名方法以内联代码的方式来简介地实现委托，但还有更简洁的方法，那就是用lambda表达式来代替匿名方法，在这里，lambda表达式就是匿名方法的简洁版。&lt;br /&gt;Lambda表达式的语法如下：&lt;br /&gt;(param1,&amp;nbsp;param2&amp;nbsp;...,paramN)&amp;nbsp;=&amp;gt;&lt;br /&gt;{&lt;br /&gt;表达式1;&lt;br /&gt;表达式2;&lt;br /&gt;return&amp;nbsp;返回值;&lt;br /&gt;}&lt;br /&gt;param1,&amp;nbsp;param2&amp;nbsp;...,paramN&amp;nbsp;就是参数，不用确定类型，编译器会做这个工作，花括号了就是lambda表达式要执行的语句，如果对应的委托类型有返回值，那么就要有return&amp;nbsp;语句。&lt;br /&gt;把第三部分那个匿名方法的例子改成用lambda表达式实现：&lt;/div&gt;&lt;p&gt;namespace&amp;nbsp;DelegateTest&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;class&amp;nbsp;Program&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;//创建委托类型&lt;/p&gt;&lt;p&gt;&amp;nbsp;delegate&amp;nbsp;int&amp;nbsp;Mydelegate(int&amp;nbsp;x,&amp;nbsp;int&amp;nbsp;y);&lt;/p&gt;&lt;p&gt;&amp;nbsp;static&amp;nbsp;void&amp;nbsp;Main(string[]&amp;nbsp;args)&lt;/p&gt;&lt;p&gt;&amp;nbsp;{&lt;/p&gt;&lt;p&gt;&amp;nbsp;//创建委托实例，指向匿名函数&lt;/p&gt;&lt;p&gt;&amp;nbsp;//&amp;nbsp;Mydelegate&amp;nbsp;mydelegate&amp;nbsp;=&amp;nbsp;delegate(int&amp;nbsp;x,int&amp;nbsp;y)&amp;nbsp;{&amp;nbsp;return&amp;nbsp;x&amp;nbsp;+&amp;nbsp;y;&amp;nbsp;};&lt;/p&gt;&lt;p&gt;&amp;nbsp;//通过委托调用匿名方法&lt;/p&gt;&lt;p&gt;&amp;nbsp;//&amp;nbsp;Console.WriteLine(mydelegate(3,2));&lt;/p&gt;&lt;p&gt;&amp;nbsp;Mydelegate&amp;nbsp;youdelegate&amp;nbsp;=&amp;nbsp;(x,&amp;nbsp;y)&amp;nbsp;=&amp;gt;&amp;nbsp;{&amp;nbsp;return&amp;nbsp;(x&amp;nbsp;-&amp;nbsp;y);&amp;nbsp;};&lt;/p&gt;&lt;p&gt;&amp;nbsp;Console.WriteLine(youdelegate(3,&amp;nbsp;2));&lt;/p&gt;&lt;p&gt;&amp;nbsp;Console.ReadKey();&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;}&lt;/p&gt;&lt;div&gt;总结：匿名方法就是没有名字的函数，Lambda表达式就是匿名方法的简洁版（指的是用在委托上这方面，Lambda还有其他方面的用处），两者都只是让代码更简洁，但在更底层层次本质是一样的&lt;/div&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2446242.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2012/04/13/2446242.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mane/archive/2011/12/13/2285599.html</id><title type="text">ASP.NET 回车提交网页</title><summary type="text">protected void Page_Load(object sender, EventArgs e) { TextBox1.Focus(); //回车提交 TextBox1.Attributes.Add("onkeydown", @"if(event.which || event.keyCode) { if ((event.which == 13) || (event.keyCode == 13)) { document.getElementById('"+ Button1.UniqueID + @"').click(); </summary><published>2011-12-13T01:36:00Z</published><updated>2011-12-13T01:36:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2011/12/13/2285599.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2011/12/13/2285599.html"/><content type="html">&lt;p&gt;protected void Page_Load(object sender, EventArgs e) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&lt;/p&gt;&lt;p&gt;TextBox1.Focus(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #808000;"&gt;//回车提交&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;TextBox1.Attributes.Add("onkeydown", &lt;span style="color: #ff00ff;"&gt;@"if(event.which || event.keyCode)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((event.which == 13) || (event.keyCode == 13))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&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;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&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; document.getElementById('"+&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Button1.UniqueID +&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;@"').click();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&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; return false;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&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;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; "&lt;/span&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;&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;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2285599.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2011/12/13/2285599.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mane/archive/2011/12/09/2281498.html</id><title type="text">利用Duoi聊天机器人服务（DuoiRobotServer）创建你自己的聊天机器人人</title><summary type="text">Duoi聊天机器人示例地址：http://www-ha.vicp.net/Default.aspxDuoi机器人WebService服务地址：http://www-ha.vicp.net/DuoiRobotService.asmx（概述）Duoi客服聊天机器人具体能做什么？只需在你的网站插入一行简单的代码，立即让你的网站拥有24小时机器人在线客服。基于Duoi客服聊天机器人服务，定制开发你的网站客服机器人。基于Duoi客服聊天机器人服务，开发QQ、MSN聊天机器人工具，代替你和你的好友聊天。注册送免费客户端DuoiClient v2.8（一）关于Duoi客服聊天机器人服务？ Duoi客服聊天机</summary><published>2011-12-09T00:39:00Z</published><updated>2011-12-09T00:39:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2011/12/09/2281498.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2011/12/09/2281498.html"/><content type="html">&lt;p&gt;&lt;strong&gt;Duoi聊天机器人示例地址：&lt;a href="http://www-ha.vicp.net/Default.aspx"&gt;http://www-ha.vicp.net/Default.aspx&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Duoi机器人WebService服务地址：&lt;a href="http://www-ha.vicp.net/DuoiRobotService.asmx"&gt;http://www-ha.vicp.net/DuoiRobotService.asmx&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="line-height: 19px;"&gt;&lt;strong&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-size: medium;"&gt;（概述）Duoi客服聊天机器人具体能做什么？&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: #000099; font-size: medium;"&gt;只需在你的网站插入一行简单的代码，立即让你的网站拥有24小时机器人在线客服。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: #000099; font-size: medium;"&gt;基于Duoi客服聊天机器人服务，定制开发你的网站客服机器人。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: #000099; font-size: medium;"&gt;基于Duoi客服聊天机器人服务，开发QQ、MSN聊天机器人工具，代替你和你的好友聊天。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: #000099; font-size: medium;"&gt;注册送免费客户端DuoiClient v2.8&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;span&gt;（一）关于Duoi客服聊天机器人服务&lt;/span&gt;&lt;strong&gt;？&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Duoi客服聊天机器人提供了一个成熟的WebService服务（DuoiRobotService）。你可以调用该服务，在你的项目中创建自己的机器人，你不仅可以在网站开发中打造你网站的24小时在线客服，甚至可以创建基于QQ、MSN的聊天机器人（我们已经为客户提供了一个客户端软件机器人软件DuoiClient V2.8，该软件可以托管您的MSN帐号，代替你和你的朋友或客户聊天。是企业客服的必备工具），WebService是一个跨平台的服务，首先，你必须熟悉这个技术，具体可以参考相关的书籍。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;（二）本网站提供了那些机器人服务？&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;1.&amp;nbsp;如果您已经&lt;strong&gt;&lt;span style="color: #000099;"&gt;[注册会员]，&lt;/span&gt;&lt;/strong&gt;那么在&lt;strong&gt;&lt;span style="color: #000099;"&gt;[个人中心]&lt;/span&gt;&lt;/strong&gt;里，你就可以获取一段&lt;span style="color: #000099;"&gt;&lt;strong&gt;[&lt;span&gt;免费代码&lt;/span&gt;]，&lt;/strong&gt;&lt;/span&gt;复制这段代码到你的网站，你的网站就可以创建一个客服聊天机器人。简单快捷，并且是免费的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. 如果你对上面的那个简单的机器人还不满意，你可以利用我们提供的Duoi客服聊天机器人WebService服务，开发一个适合你的机器人客服网站，或者客户端软件。但是你不仅必须是&lt;span style="color: #000099;"&gt;&lt;strong&gt;[注册会员]，&lt;/strong&gt;&lt;/span&gt;并且已经&lt;strong&gt;&lt;span style="color: #000099;"&gt;[&lt;span&gt;获取授权&lt;/span&gt;]。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;（三）如何注册并申请使用Duoi机器人服务？&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;1. 点击&lt;span style="color: #000099;"&gt;&lt;strong&gt;[官方网站]&lt;/strong&gt;&lt;/span&gt;右上角的&lt;span style="color: #000099;"&gt;&lt;strong&gt;[注册会员]&lt;/strong&gt;&lt;/span&gt;打开注册用户页面，注册一个新用户&lt;/p&gt;&lt;p&gt;&amp;nbsp;&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;2. 登录后在&lt;strong&gt;&lt;span style="color: #000099;"&gt;[个人中心]&lt;/span&gt;&lt;/strong&gt;中点击&lt;span style="color: #000099;"&gt;&lt;strong&gt;[&lt;span&gt;获取授权&lt;/span&gt;]&lt;/strong&gt;&lt;/span&gt;按钮，系统将自动发送申请邮件到管理员手中，管理员会在电话、Email、和&lt;span style="color: #000099;"&gt;&lt;strong&gt;[站内短信息]&lt;/strong&gt;&lt;/span&gt;中回复您的申请结果。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. 你也可以通过网站的客服QQ或Emai或者致电，联系我们的客服人员，申请为你开通服务授权。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;（四）DuoiRobotService.GetBestAnswer方法&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote dir="ltr"&gt;&lt;p&gt;&lt;strong&gt;服务原型为:&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;类： public class DuoiRobotService&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 方法: public string GetBestAnswer(string inputQuestion,string userName,string userPwd)&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;调用该方法就可以根据您输入的问句获取机器人的回答。&amp;nbsp;&lt;br /&gt;参数string inputQuestion为用户问句。&lt;br /&gt;参数string userName为使用该服务的用户名。&amp;nbsp;&lt;br /&gt;参数string userPwd为使用该服务的用户密码。&lt;/p&gt;&lt;p&gt;例如：你可以在.NET项目中调用&lt;strong&gt;&lt;span style="color: #000099;"&gt;[&lt;span&gt;开放服务]&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;的页面地址为Web引用（即官方网站中打开&lt;strong&gt;[&lt;/strong&gt;&lt;span style="color: #000099;"&gt;&lt;strong&gt;开放服务]&lt;/strong&gt;&lt;span style="color: #000000;"&gt;页面&lt;/span&gt;&lt;/span&gt;后的页面地址 。如 http://localhost:4261/DuoiRobotService.asmx）,利用生成的引用创建该类的对象并使用该方法。&amp;nbsp;&lt;br /&gt;如果你没有用户名和密码，那么你可以到我们的官方网站注册一个用户，并咨询我们的客服获得授权后，就可以正常使用该服务了！&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="line-height: 19px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold; font-size: 16px;"&gt;（五）以ASP.NET为例创建一个基于DuoiRobotService的应用：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.在网站项目中新建一个Web窗体Content.aspx，在窗体中添加一个列表框ListBox、输入框TextBox、一个提交按钮Button。具体代码如下：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011120908330624.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;运行效果如下：&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011120908370585.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.在解决方案资源管理器的所在项目右击选择&amp;ldquo;添加Web引用&amp;rdquo;输入服务引用的地址（即官方网站中打开&amp;ldquo;开放服务&amp;rdquo;后的页面地址 。如 http://localhost:4261/DuoiRobotService.asmx）发现服务后，修改&amp;ldquo;Web引用名&amp;ldquo;为Duoi（该名称可以自己定），如图&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011120908350555.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.如此，我们便将Duoi机器人的服务引用到自己的项目中，我们在刚才创建的Web窗体的后台代码中添加服务的命名空间，如下代码：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #660099;"&gt;using &lt;/span&gt;WebApplication1.Duoi;&lt;span style="color: #009900;"&gt;//引用机器人服务&lt;/span&gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4.我们可以创建Button按钮的单击事件处理程序，如下代码&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011120908351967.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5.运行，测试效果如下：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011120908353393.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2281498.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2011/12/09/2281498.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mane/archive/2011/11/28/2265953.html</id><title type="text">Winform设计不规则窗体</title><summary type="text">创建不规则窗体，首先需要设计一个透明部分的 alpha值小于10的图片，推荐PNG格式 ///&lt;summary&gt; /// 设置不规则窗体 ///&lt;/summary&gt; ///&lt;param name="sender"&gt;&lt;/param&gt; ///&lt;param name="e"&gt;&lt;/param&gt; private void Login_Load(object sender, EventArgs e) { //从指定的位图中获取alpha透明度大于 10 的区域 Bi...</summary><published>2011-11-28T03:24:00Z</published><updated>2011-11-28T03:24:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2011/11/28/2265953.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2011/11/28/2265953.html"/><content type="html">&lt;p&gt;创建不规则窗体，首先需要设计一个透明部分的 alpha值小于10的图片，推荐PNG格式&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 设置不规则窗体&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="sender"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="e"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Login_Load(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;从指定的位图中获取alpha透明度大于 10 的区域&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Bitmap img = (Bitmap)pictureBox1.Image; &lt;br /&gt;            GraphicsPath grapth = GetNoneTransparentRegion(img, &lt;span style="color: #800080;"&gt;10&lt;/span&gt;); &lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.Region = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Region(grapth);&lt;br /&gt;           &lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;要显示的图片设置为窗体背景&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.BackgroundImage = pictureBox1.Image; &lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.BackgroundImageLayout = ImageLayout.Zoom; &lt;br /&gt;            &lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;在修改窗体尺寸之前设置窗体为无边框样式&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.FormBorderStyle = FormBorderStyle.None;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.Width = pictureBox1.Image.Width;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.Height = pictureBox1.Image.Height;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 返回指定图片中的非透明区域(方法)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="img"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;位图&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="alpha"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;alpha 小于等于该值的为透明&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; GraphicsPath GetNoneTransparentRegion(Bitmap img, &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt; alpha)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; height = img.Height;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; width = img.Width;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; xStart, xEnd;&lt;br /&gt;            GraphicsPath grpPath = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; GraphicsPath();&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; y = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; y &amp;lt; height; y++)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;逐行扫描      &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; x = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; x &amp;lt; width; x++)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;略过连续透明的部分          &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                    &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (x &amp;lt; width &amp;amp;&amp;amp; img.GetPixel(x, y).A &amp;lt;= alpha)&lt;br /&gt;                    {&lt;br /&gt;                        x++;&lt;br /&gt;                    }&lt;br /&gt;                    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;不透明部分；   &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                    xStart = x;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (x &amp;lt; width &amp;amp;&amp;amp; img.GetPixel(x, y).A &amp;gt; alpha)&lt;br /&gt;                    {&lt;br /&gt;                        x++;&lt;br /&gt;                    }&lt;br /&gt;                    xEnd = x;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (img.GetPixel(x - &lt;span style="color: #800080;"&gt;1&lt;/span&gt;, y).A &amp;gt; alpha)&lt;br /&gt;                    {&lt;br /&gt;                        grpPath.AddRectangle(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Rectangle(xStart, y, xEnd - xStart, &lt;span style="color: #800080;"&gt;1&lt;/span&gt;));&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; grpPath;&lt;br /&gt;        }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2265953.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2011/11/28/2265953.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mane/archive/2011/11/19/2254851.html</id><title type="text">ASP.NET 创建发布一个简单的wcf服务</title><summary type="text">你还可以看我的另一篇简单的调用WCF方法ASP.NET创建WCF服务相对要比Winform或控制台要简单，如下：1.在VS2010中，打开 “文件”--“新建” --“网站” --“Asp.net网站”，创建一个新的网站项目，系统将生成如下项目文件：2. 右击项目--“添加新项”3.选择“WCF服务”，输入服务名称4.IDE将生成一些文件，如下：我们可以看到生成了IServices.cs Service.cs Service.svc 以及修改了的Web.configIServices.cs：using System;using System.Collections.Generic;using </summary><published>2011-11-19T01:37:00Z</published><updated>2011-11-19T01:37:00Z</updated><author><name>Yao,Mane</name><uri>http://www.cnblogs.com/mane/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mane/archive/2011/11/19/2254851.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mane/archive/2011/11/19/2254851.html"/><content type="html">&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2011/11/19/2254898.html"&gt;&lt;strong&gt;你还可以看我的另一篇简单的调用WCF方法&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;ASP.NET创建WCF服务相对要比Winform或控制台要简单，如下：&lt;/p&gt;&lt;p&gt;1.在VS2010中，打开 &amp;ldquo;文件&amp;rdquo;&amp;nbsp;--&amp;ldquo;新建&amp;rdquo; --&amp;ldquo;网站&amp;rdquo; --&amp;ldquo;Asp.net网站&amp;rdquo;，创建一个新的网站项目，系统将生成如下项目文件：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011111909130586.png" alt="" width="222" height="295" /&gt;&lt;/p&gt;&lt;p&gt;2. 右击项目--&amp;ldquo;添加新项&amp;rdquo;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011111909153451.png" alt="" width="434" height="255" /&gt;&lt;/p&gt;&lt;p&gt;3.选择&amp;ldquo;WCF服务&amp;rdquo;，输入服务名称&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011111909170168.png" alt="" width="563" height="384" /&gt;&lt;/p&gt;&lt;p&gt;4.IDE将生成一些文件，如下：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011111909191762.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;我们可以看到生成了&lt;span style="color: #ff6600;"&gt;&lt;strong&gt;IServices.cs&amp;nbsp; Service.cs&amp;nbsp; Service.svc&lt;/strong&gt;&lt;/span&gt; 以及修改了的&lt;span style="color: #ff6600;"&gt;&lt;strong&gt;Web.config&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IServices.cs：&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Runtime.Serialization;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.ServiceModel;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 注意: 使用&amp;ldquo;重构&amp;rdquo;菜单上的&amp;ldquo;重命名&amp;rdquo;命令，可以同时更改代码和配置文件中的接口名&amp;ldquo;IService&amp;rdquo;。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;[ServiceContract]&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;interface&lt;/span&gt; IService&lt;br /&gt;{&lt;br /&gt;    [OperationContract]&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; DoWork();&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Service.cs&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Runtime.Serialization;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.ServiceModel;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 注意: 使用&amp;ldquo;重构&amp;rdquo;菜单上的&amp;ldquo;重命名&amp;rdquo;命令，可以同时更改代码、svc 和配置文件中的类名&amp;ldquo;Service&amp;rdquo;。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Service : IService&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; DoWork()&lt;br /&gt;    {&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Service.svc&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;(.SVC)是文件服务激活（File-Less Activation），作用类似于winform的宿主。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="background-color: #ffff00; color: #000000;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;@ ServiceHost Language&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;C#&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; Debug&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;true&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; Service&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;Service&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; CodeBehind&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;~/App_Code/Service.cs&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #ffff00; color: #000000;"&gt;%&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Web.config&lt;/strong&gt;增加了如下配置&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;behaviors&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;behavior &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=""&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;serviceMetadata &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;httpGetEnabled&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="true"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;serviceDebug &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="false"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;behavior&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;behaviors&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;serviceHostingEnvironment &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;multipleSiteBindingsEnabled&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="true"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;5.我们可以在类Service中做如下修改，修改返回类型为string 并且返回一个字符串：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Service : IService&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; DoWork()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;HelloWord&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&amp;nbsp; 我们在接口IService中公开契约，返回类型为string ，修改如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;interface&lt;/span&gt; IService&lt;br /&gt;{&lt;br /&gt;    [OperationContract]&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;  DoWork();&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;&lt;br /&gt;6.发布站点，我们就可以使用&lt;strong&gt;http://服务器地址/Service.svc&lt;/strong&gt; 访问WCF服务了。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 如本例的：&lt;a href="http://localhost:49841/WebSite2/Service.svc"&gt;http://localhost:49841/WebSite2/Service.svc&lt;/a&gt;，你看到如下页面&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/133956/2011111909344669.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;共同勉励，希望本文会对初学WCF的同学们有所帮助！&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mane/aggbug/2254851.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mane/archive/2011/11/19/2254851.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
