<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET</title>
        <link>http://blog.rongzhiwang.com/baicaps/category/11.aspx</link>
        <description>.NET技术</description>
        <language>zh-CHS</language>
        <copyright>baicaps</copyright>
        <managingEditor>baicaps@126.com</managingEditor>
        <generator>interwis.net Blog Version 3.0.0.0</generator>
        <item>
            <title>09年最受关注的十大Visual Studio插件</title>
            <link>http://blog.rongzhiwang.com/baicaps/archive/2010/02/26/09visual-studio.aspx</link>
            <description>&lt;div&gt;      1. AnkhSVN - Subversion SCC Provider&lt;/div&gt;
&lt;div&gt;       &lt;a href="http://ankhsvn.open.collab.net/"&gt;http://ankhsvn.open.collab.net/&lt;/a&gt; &lt;/div&gt;
&lt;p&gt;　　AnkhSVN是一个VS的Subversion 源代码管理提供者。通过这个插件,你可以方便的在Visual Studio中使用Subversion管理你的项目和代码。这个项目保持着相当的活跃性。在本文发表时最新的版本是2.1.7444。强烈推荐开发者使用，尤其是你将你的项目托管到google code或者sourceforge上，你可以使用这个插件连接你的项目。&lt;/p&gt;
&lt;p style="text-align: center"&gt;　　&lt;img style="width: 326px; height: 343px" alt="" src="http://image4.it168.com/2009/12/16/01fd5b51-eb90-45ec-ace0-ce9187082bfe.jpg" width="326" height="343" /&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;2. MetalScroll&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　   &lt;a href="http://code.google.com/p/metalscroll/"&gt;http://code.google.com/p/metalscroll/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　MetalScroll是RockScroll插件的替代者。它用一个代码缩略图替换代码编辑器的滚动条。&lt;/p&gt;
&lt;p style="text-align: center" id="img1403348"&gt;&lt;img style="width: 419px; height: 360px" alt="" src="http://image4.it168.com/2009/12/16/0e9c4b3c-6fb9-4848-a83c-b7a6b2ee0250.jpg" width="419" height="360" /&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;3. Source Code Outliner Power Toy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;a href="http://www.codeplex.com/SourceCodeOutliner"&gt;http://www.codeplex.com/SourceCodeOutliner&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　是另外一个方便查看代码大纲的插件。如果使用Eclipse进行Java项目的开发，你可能习惯了Eclipse大纲显示的便捷性。这个插件实现了此特别有用的功能，它可以在一个窗口内显示类的成员信息，方便开发者查看和导航。&lt;/p&gt;
&lt;p style="text-align: center" id="img7849383"&gt;&lt;img style="width: 439px; height: 348px" alt="" src="http://image4.it168.com/2009/12/16/707c674c-1538-4386-87f9-74d66d7b5f27.jpg" width="439" height="348" /&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;4. GhostDoc&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;a href="http://submain.com/products/ghostdoc.aspx"&gt;http://submain.com/products/ghostdoc.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　GhostDoc是一个免费的文档自动生成插件。它可以根据方法和方法的类型信息和参数自动生成XML注释信息。&lt;/p&gt;
&lt;p style="text-align: center" id="img9128054"&gt;&lt;img style="width: 429px; height: 131px" alt="" src="http://image4.it168.com/2009/12/16/311533bc-584e-40c3-a301-3fcdd9161435.jpg" width="429" height="131" /&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;5. Copy As HTML&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;a href="http://www.lavernockenterprises.co.uk/downloads/copyashtml/copyashtml.aspx"&gt;http://www.lavernockenterprises.co.uk/downloads/copyashtml/copyashtml.aspx&lt;/a&gt;&lt;/p&gt;
&lt;div style="text-align: center" id="img7538246"&gt;&lt;img alt="" src="http://image4.it168.com/2009/12/16/7834cb5a-b557-4e90-ae1b-49492d0311e4.jpg" width="205" height="374" /&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;       6. VsVim&lt;/strong&gt;
&lt;p&gt;　　&lt;a href="http://blogs.msdn.com/jaredpar/archive/2009/09/09/vim-emulator-editor-extension-released.aspx"&gt;http://blogs.msdn.com/jaredpar/archive/2009/09/09/vim-emulator-editor-extension-released.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　你是一个VIM的狂热分子吗?&lt;a class="nounderline" title="网络" href="http://net.it168.com/" target="_blank"&gt;网络&lt;/a&gt;不乏这些忠实的信众，如迷春哥狂热的坚持使用vim做自己的开发。这个插件为VS提供了一个VIM模拟器。你可以使用”VIM”编辑你的代码。&lt;/p&gt;
&lt;p style="text-align: center" id="img6455618"&gt;&lt;img alt="" src="http://image4.it168.com/2009/12/16/1ae01449-7f26-41f2-b170-7bec3f7d354b.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;7. VS 2008 File Finder&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;a href="http://www.huffs.us/blogEngine/page/VS-2008-File-Finder.aspx"&gt;http://www.huffs.us/blogEngine/page/VS-2008-File-Finder.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　在一个包含N个project的解决方案中查找一个文件时，使用这个插件相当有用。它提供一个窗口，可以快速的找到项目中的某个文件。类似Eclipse的Ctrl+Shift+R快捷键。&lt;/p&gt;
&lt;p style="text-align: center" id="img1369002"&gt;&lt;img style="width: 357px; height: 339px" alt="" src="http://image4.it168.com/2009/12/16/097fd18c-7441-4c25-8b13-27a0bf6fe30c.jpg" width="357" height="339" /&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;8. PowerCommands for Visual Studio 2008&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=PowerCommands&amp;amp;ReleaseId=559"&gt;http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=PowerCommands&amp;amp;ReleaseId=559&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　为VS提供了一堆的命令扩展。&lt;/p&gt;
&lt;p style="text-align: center" id="img6533921"&gt;&lt;img style="width: 267px; height: 273px" alt="" src="http://image4.it168.com/2009/12/16/2987c5c8-44c1-4bbd-aeae-99ded59a39f7.jpg" width="267" height="273" /&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;9. TracExplorer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;a href="http://tracexplorer.devjavu.com/"&gt;http://tracexplorer.devjavu.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;a href="https://groups.google.com/group/tracexplorer?pli=1"&gt;https://groups.google.com/group/tracexplorer?pli=1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　tracexplorer是一个Trac客户端。你可以在VS中浏览和管理Trac中的ticket。&lt;/p&gt;
&lt;p style="text-align: center" id="img9723950"&gt;&lt;img alt="" src="http://image4.it168.com/2009/12/16/96598dce-b4fe-4e7a-9ea5-188b579aa28a.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;strong&gt;10. Clone Detective for Visual Studio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;　　&lt;a href="http://clonedetectivevs.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=16114"&gt;http://clonedetectivevs.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=16114&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;　　此插件可以分析项目中的代码，找到那些重复的代码。重复的代码不但冗余，而且一旦修改业务逻辑，多处代码也不好维护一致性。&lt;br /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;img src="http://blog.rongzhiwang.com/baicaps/aggbug/131.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>baicaps</dc:creator>
            <guid>http://blog.rongzhiwang.com/baicaps/archive/2010/02/26/09visual-studio.aspx</guid>
            <pubDate>Fri, 26 Feb 2010 10:57:16 GMT</pubDate>
            <wfw:comment>http://blog.rongzhiwang.com/baicaps/comments/131.aspx</wfw:comment>
            <comments>http://blog.rongzhiwang.com/baicaps/archive/2010/02/26/09visual-studio.aspx#feedback</comments>
            <wfw:commentRss>http://blog.rongzhiwang.com/baicaps/comments/commentRss/131.aspx</wfw:commentRss>
            <trackback:ping>http://blog.rongzhiwang.com/baicaps/services/trackbacks/131.aspx</trackback:ping>
        </item>
        <item>
            <title>全面的ASP.NET面试题目集锦（2） </title>
            <link>http://blog.rongzhiwang.com/baicaps/archive/2009/09/04/asp.net2.aspx</link>
            <description>&lt;p&gt;51.数组有没有length()这个方法? String有没有length()这个方法？ &lt;br /&gt;
答：数组没有length()这个方法，有length的属性。String有有length()这个方法。&lt;/p&gt;
&lt;p&gt;52.sleep() 和 wait() 有什么区别? &lt;br /&gt;
答：sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后，线程不一定立即恢复执行。这是因为在那个时刻，其它线程可能正在运行而且没有被调度为放弃执行，除非(a)“醒来”的线程具有更高的优先级 &lt;br /&gt;
(b)正在运行的线程因为其它原因而阻塞。 &lt;br /&gt;
wait()是线程交互时，如果线程对一个同步对象x 发出一个wait()调用，该线程会暂停执行，被调对象进入等待状态，直到被唤醒或等待时间到。&lt;/p&gt;
&lt;p&gt;53.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?&lt;br /&gt;
答：short s1 = 1; s1 = s1 + 1;有错，s1是short型，s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。&lt;/p&gt;
&lt;p&gt;54.谈谈final, finally, finalize的区别。 &lt;br /&gt;
答： &lt;br /&gt;
final—修饰符（关键字）如果一个类被声明为final，意味着它不能再派生出新的子类，不能作为父类被继承。因此 一个类不能既被声明为 abstract的，又被声明为final的。将变量或方法声明为final，可以保证它们在使用中 不被改变。被声明为final的变量必须在声明时给定初值，而在以后的引用中只能读取，不可修改。被声明为 final的方法也同样只能使用，不能重载 &lt;br /&gt;
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常，那么相匹配的 catch 子句就会 执行，然后控制就会进入 finally 块（如果有的话）。 &lt;br /&gt;
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理 工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ，因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。&lt;/p&gt;
&lt;p&gt;55.如何处理几十万条并发数据？ &lt;br /&gt;
答：用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.&lt;/p&gt;
&lt;p&gt;56.Session有什么重大BUG，微软提出了什么方法加以解决？ &lt;br /&gt;
答：是iis中由于有进程回收机制，系统繁忙的话Session会丢失，可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢，而且无法捕获Session的END事件。&lt;/p&gt;
&lt;p&gt;57.进程和线程的区别？ &lt;br /&gt;
答：进程是系统进行资源分配和调度的单位；线程是CPU调度和分派的单位，一个进程可以有多个线程，这些线程共享这个进程的资源。&lt;/p&gt;
&lt;p&gt;58.堆和栈的区别？ &lt;br /&gt;
答： &lt;br /&gt;
栈：由编译器自动分配、释放。在函数体中定义的变量通常在栈上。 &lt;br /&gt;
堆：一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。&lt;/p&gt;
&lt;p&gt;59.成员变量和成员函数前加static的作用？ &lt;br /&gt;
答：它们被称为常成员变量和常成员函数，又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量，类成员函数负责这种统计的动作。&lt;/p&gt;
&lt;p&gt;60.ASP。NET与ASP相比，主要有哪些进步？ &lt;br /&gt;
答：asp解释形，aspx编译型，性能提高，有利于保护源码。&lt;/p&gt;
&lt;p&gt;61.产生一个int数组，长度为100，并向其中随机插入1-100，并且不能重复。 &lt;br /&gt;
int[] intArr=new int[100]; &lt;br /&gt;
ArrayList myList=new ArrayList(); &lt;br /&gt;
Random rnd=new Random(); &lt;br /&gt;
while(myList.Count&amp;lt;100) &lt;br /&gt;
{ &lt;br /&gt;
int num=rnd.Next(1,101); &lt;br /&gt;
if(!myList.Contains(num)) &lt;br /&gt;
myList.Add(num);&lt;br /&gt;
} &lt;br /&gt;
for(int i=0;i&amp;lt;100;i++) &lt;br /&gt;
intArr[i]=(int)myList[i];&lt;/p&gt;
&lt;p&gt;62.请说明在.net中常用的几种页面间传递参数的方法，并说出他们的优缺点。 &lt;br /&gt;
答：session(viewstate) 简单，但易丢失 &lt;br /&gt;
application 全局 &lt;br /&gt;
cookie 简单，但可能不支持，可能被伪造 &lt;br /&gt;
input ttype="hidden" 简单，可能被伪造 &lt;br /&gt;
url参数 简单，显示于地址栏，长度有限 &lt;br /&gt;
数据库 稳定，安全，但性能相对弱&lt;/p&gt;
&lt;p&gt;63.请指出GAC的含义？ &lt;br /&gt;
答：全局程序集缓存。&lt;/p&gt;
&lt;p&gt;64.向服务器发送请求有几种方式？ &lt;br /&gt;
答：get,post。get一般为链接方式，post一般为按钮方式。&lt;/p&gt;
&lt;p&gt;65.DataReader与Dataset有什么区别？ &lt;br /&gt;
答：一个是只能向前的只读游标，一个是内存中的表。&lt;/p&gt;
&lt;p&gt;66.软件开发过程一般有几个阶段？每个阶段的作用？ &lt;br /&gt;
答：需求分析，架构设计，代码编写，QA，部署&lt;/p&gt;
&lt;p&gt;67.在c#中using和new这两个关键字有什么意义，请写出你所知道的意义？using 指令 和语句 new 创建实例 new 隐藏基类中方法。 &lt;br /&gt;
答：using 引入名称空间或者使用非托管资源 &lt;br /&gt;
new 新建实例或者隐藏父类方法&lt;/p&gt;
&lt;p&gt;68.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个. &lt;br /&gt;
答：string inputStr=" xx xx "; &lt;br /&gt;
inputStr=Regex.Replace(inputStr.Trim()," *"," ");&lt;/p&gt;
&lt;p&gt;69.下面这段代码输出什么？为什么？ &lt;br /&gt;
int i=5; &lt;br /&gt;
int j=5; &lt;br /&gt;
if (Object.ReferenceEquals(i,j)) &lt;br /&gt;
Console.WriteLine("Equal"); &lt;br /&gt;
else &lt;br /&gt;
Console.WriteLine("Not Equal"); &lt;br /&gt;
答：不相等，因为比较的是对象&lt;/p&gt;
&lt;p&gt;70.什么叫做SQL注入，如何防止？请举例说明。 &lt;br /&gt;
答：利用sql关键字对网站进行攻击。过滤关键字’等&lt;/p&gt;
&lt;p&gt;71.什么是反射？ &lt;br /&gt;
答：动态获取程序集信息&lt;/p&gt;
&lt;p&gt;72.用Singleton如何写设计模式 &lt;br /&gt;
答：static属性里面new ,构造函数private&lt;/p&gt;
&lt;p&gt;73.什么是Application Pool？ &lt;br /&gt;
答：Web应用，类似Thread Pool，提高并发性能。&lt;/p&gt;
&lt;p&gt;74.什么是虚函数？什么是抽象函数？ &lt;br /&gt;
答：虚函数：没有实现的，可由子类继承并重写的函数。抽象函数：规定其非虚子类必须实现的函数，必须被重写。&lt;/p&gt;
&lt;p&gt;75.什么是XML？ &lt;br /&gt;
答：XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能理解的信息符号，通过此种标记，计算机之间可以处理包含各种信息的文章等。如何定义这些标记，即可以选择国际通用的标记语言，比如HTML，也可以使用象XML这样由相关人士自由决定的标记语言，这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
 &lt;/p&gt;
&lt;p&gt;76.什么是Web Service？UDDI？ &lt;br /&gt;
答：Web Service便是基于网络的、分布式的模块化组件，它执行特定的任务，遵守具体的技术规范，这些规范使得Web Service能与其他兼容的组件进行互操作。 &lt;br /&gt;
　 UDDI 的目的是为电子商务建立标准；UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范，同时也包含一组使企业能将自身提供的Web Service注册，以使别的企业能够发现的访问协议的实现标准。&lt;br /&gt;
77.什么是ASP.net中的用户控件？ &lt;br /&gt;
答：用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类似ASP中的include..但是功能要强大的多。&lt;/p&gt;
&lt;p&gt;78.列举一下你所了解的XML技术及其应用 &lt;br /&gt;
答：xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和config&lt;/p&gt;
&lt;p&gt;79.ADO.net中常用的对象有哪些？分别描述一下。 &lt;br /&gt;
答：Connection 数据库连接对象 &lt;br /&gt;
Command 数据库命令 &lt;br /&gt;
DataReader 数据读取器 &lt;br /&gt;
DataSet 数据集&lt;/p&gt;
&lt;p&gt;80.什么是code-Behind技术。 &lt;br /&gt;
答：ASPX,RESX和CS三个后缀的文件，这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.&lt;/p&gt;
&lt;p&gt;81.什么是SOAP,有哪些应用。 &lt;br /&gt;
答：simple object access protocal,简单对象接受协议.以xml为基本编码结构,建立在已有通信协议上(如http,不过据说ms在搞最底层的架构在tcp/ip上的soap)的一种规范Web Service使用的协议..&lt;/p&gt;
&lt;p&gt;82.C#中 property 与 attribute的区别，他们各有什么用处，这种机制的好处在哪里？ &lt;br /&gt;
答：一个是属性，用于存取类的字段，一个是特性，用来标识类，方法等的附加性质&lt;/p&gt;
&lt;p&gt;83.XML 与 HTML 的主要区别 &lt;br /&gt;
答：1. XML是区分大小写字母的，HTML不区分。  &lt;br /&gt;
2. 在HTML中，如果上下文清楚地显示出段落或者列表键在何处结尾，那么你可以省略&lt;/p&gt;
&lt;p&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; &lt;/p&gt;
&lt;p&gt;84.c#中的三元运算符是？ &lt;br /&gt;
答：？：。&lt;/p&gt;
&lt;p&gt;85.当整数a赋值给一个object对象时，整数a将会被？ &lt;br /&gt;
答：装箱。&lt;/p&gt;
&lt;p&gt;86.类成员有_____种可访问形式？ &lt;br /&gt;
答：this.;new Class().Method;&lt;/p&gt;
&lt;p&gt;87.public static const int A=1;这段代码有错误么？是什么？ &lt;br /&gt;
答：const不能用static修饰。&lt;/p&gt;
&lt;p&gt;88.float f=-123.567F; int i=(int)f;i的值现在是_____?  &lt;br /&gt;
答：-123。&lt;/p&gt;
&lt;p&gt;89.委托声明的关键字是______? &lt;br /&gt;
答：delegate.&lt;/p&gt;
&lt;p&gt;90.用sealed修饰的类有什么特点？ &lt;br /&gt;
答：密封，不能继承。&lt;/p&gt;
&lt;p&gt;91.在Asp.net中所有的自定义用户控件都必须继承自________? &lt;br /&gt;
答：Control。&lt;/p&gt;
&lt;p&gt;92.在.Net中所有可序列化的类都被标记为_____?  &lt;br /&gt;
答：[serializable]&lt;/p&gt;
&lt;p&gt;93.在.Net托管代码中我们不用担心内存漏洞，这是因为有了______? &lt;br /&gt;
答：GC。&lt;/p&gt;
&lt;p&gt;94.下面的代码中有什么错误吗？_______ &lt;br /&gt;
using System; &lt;br /&gt;
class A &lt;br /&gt;
{ &lt;br /&gt;
public virtual void F(){ &lt;br /&gt;
Console.WriteLine("A.F"); &lt;br /&gt;
} &lt;br /&gt;
} &lt;br /&gt;
abstract class B:A &lt;br /&gt;
{ &lt;br /&gt;
public abstract override void F(); 答：abstract override 是不可以一起修饰.  &lt;br /&gt;
} // new public abstract void F();&lt;/p&gt;
&lt;p&gt;95.当类T只声明了私有实例构造函数时，则在T的程序文本外部，___可以___（可以 or 不可以）从T派生出新的类，不可以____（可以 or 不可以）直接创建T的任何实例。 &lt;br /&gt;
答：不可以，不可以。&lt;/p&gt;
&lt;p&gt;96.下面这段代码有错误么？ &lt;br /&gt;
switch (i){ &lt;br /&gt;
case(): 答：//case()条件不能为空 &lt;br /&gt;
CaseZero(); &lt;br /&gt;
break; &lt;br /&gt;
case 1: &lt;br /&gt;
CaseOne(); &lt;br /&gt;
break; &lt;br /&gt;
case 2: &lt;br /&gt;
dufault; 答：//wrong，格式不正确 &lt;br /&gt;
CaseTwo(); &lt;br /&gt;
break; &lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;97.在.Net中，类System.Web.UI.Page 可以被继承么？ &lt;br /&gt;
答：可以。&lt;/p&gt;
&lt;p&gt;98..net的错误处理机制是什么？ &lt;br /&gt;
答：.net错误处理机制采用try-&amp;gt;catch-&amp;gt;finally结构，发生错误时，层层上抛，直到找到匹配的Catch为止。&lt;/p&gt;
&lt;p&gt;99.利用operator声明且仅声明了==，有什么错误么? &lt;br /&gt;
答：要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="&lt;/p&gt;
&lt;p&gt;100.在.net（C# or vb.net）中如何用户自定义消息，并在窗体中处理这些消息。 &lt;br /&gt;
答：在form中重载DefWndProc函数来处理消息: &lt;br /&gt;
protected override void DefWndProc ( ref System.WinForms.Message m )  &lt;br /&gt;
{  &lt;br /&gt;
switch(m.msg)  &lt;br /&gt;
{  &lt;br /&gt;
case WM_Lbutton :  &lt;br /&gt;
　 ///string与MFC中的CString的Format函数的使用方法有所不同  &lt;br /&gt;
　 string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam);  &lt;br /&gt;
　 MessageBox.Show(message);///显示一个消息框  &lt;br /&gt;
　 break;  &lt;br /&gt;
case USER: &lt;br /&gt;
处理的代码 &lt;br /&gt;
default:  &lt;br /&gt;
　 base.DefWndProc(ref m);///调用基类函数处理非自定义消息。  &lt;br /&gt;
　 break;  &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
 &lt;/p&gt;
&lt;p&gt;101.在.net（C# or vb.net）中如何取消一个窗体的关闭。 &lt;br /&gt;
答：private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) &lt;br /&gt;
{ &lt;br /&gt;
e.Cancel=true; &lt;br /&gt;
} &lt;/p&gt;
&lt;p&gt;102.在.net（C# or vb.net）中，Appplication.Exit 还是 Form.Close有什么不同？ &lt;br /&gt;
答：一个是退出整个应用程序，一个是关闭其中一个form。&lt;/p&gt;
&lt;p&gt;103.在C#中有一个double型的变量，比如10321.5，比如122235401.21644，作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50和$122，235，401.22而在英国则为￡10 321.50和￡122 235 401.22 &lt;br /&gt;
答：System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US"); &lt;br /&gt;
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");为英 国 货币类型 &lt;br /&gt;
decimal y = 9999999999999999999999999999m; &lt;br /&gt;
string str = String.Format(MyCulture,"My amount = {0:c}",y);&lt;/p&gt;
&lt;p&gt;104.某一密码仅使用K、L、M、N、O共5个字母，密码中的单词从左向右排列，密码单词必须遵循如下规则： &lt;br /&gt;
（1） 密码单词的最小长度是两个字母，可以相同，也可以不同&lt;br /&gt;
（2） K不可能是单词的第一个字母 &lt;br /&gt;
（3） 如果L出现，则出现次数不止一次 &lt;br /&gt;
（4） M不能使最后一个也不能是倒数第二个字母 &lt;br /&gt;
（5） K出现，则N就一定出现 &lt;br /&gt;
（6） O如果是最后一个字母，则L一定出现 &lt;br /&gt;
问题一：下列哪一个字母可以放在LO中的O后面，形成一个3个字母的密码单词？ &lt;br /&gt;
A) K B)L C) M D) N &lt;br /&gt;
答案:B&lt;/p&gt;
&lt;p&gt;问题二：如果能得到的字母是K、L、M，那么能够形成的两个字母长的密码单词的总数是多少？ &lt;br /&gt;
A)1个 B)3个 C)6个 D）9个 &lt;br /&gt;
答案:A&lt;/p&gt;
&lt;p&gt;问题三：下列哪一个是单词密码？ &lt;br /&gt;
A) KLLN B) LOML C) MLLO D)NMKO &lt;br /&gt;
答案:C&lt;/p&gt;
&lt;p&gt;8. 62-63=1 等式不成立，请移动一个数字（不可以移动减号和等于号），使得等式成立，如何移动？ &lt;br /&gt;
答案:62移动成2的6次方&lt;/p&gt;
&lt;p&gt;105.对于这样的一个枚举类型： &lt;br /&gt;
enum Color:byte &lt;br /&gt;
{ &lt;br /&gt;
Red, &lt;br /&gt;
Green, &lt;br /&gt;
Blue, &lt;br /&gt;
orange &lt;br /&gt;
} &lt;br /&gt;
答：string[] ss=Enum.GetNames(typeof(Color)); &lt;br /&gt;
byte[] bb=Enum.GetValues(typeof(Color));&lt;/p&gt;
&lt;p&gt;106. C#中 property 与 attribute的区别，他们各有什么用处，这种机制的好处在哪里？ &lt;br /&gt;
答：attribute:自定义属性的基类;property :类中的属性&lt;/p&gt;
&lt;p&gt;107.C#可否对内存进行直接的操作？ &lt;br /&gt;
答：在.net下，.net引用了垃圾回收（GC）功能，它替代了程序员 不过在C#中，不能直接实现Finalize方法，而是在析构函数中调用基类的Finalize()方法&lt;/p&gt;
&lt;p&gt;108.ADO。NET相对于ADO等主要有什么改进？ &lt;br /&gt;
答：1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使用com3:不在支持动态游标和服务器端游 4:,可以断开connection而保留当前数据集可用 5:强类型转换 6:xml支持&lt;/p&gt;
&lt;p&gt;109.写一个HTML页面，实现以下功能，左键点击页面时显示“您好”，右键点击时显示“禁止右键”。并在2分钟后自动关闭页面。 &lt;br /&gt;
答： &amp;lt;!-- Inject Script Filtered --&amp;gt;&lt;/p&gt;
&lt;p&gt;110.大概描述一下ASP。NET服务器控件的生命周期 &lt;br /&gt;
答：初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件 预呈现 保存状态 呈现 处置 卸载&lt;/p&gt;
&lt;p&gt;111.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)? &lt;br /&gt;
答：不能，可以实现接口&lt;/p&gt;
&lt;p&gt;112.Static Nested Class 和 Inner Class的不同，说得越多越好 &lt;br /&gt;
答：Static Nested Class是被声明为静态（static）的内部类，它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。&lt;/p&gt;
&lt;p&gt;113.，&amp;amp;和&amp;amp;&amp;amp;的区别。 &lt;br /&gt;
&amp;amp;是位运算符，表示按位与运算，&amp;amp;&amp;amp;是逻辑运算符，表示逻辑与（and）.&lt;/p&gt;
&lt;p&gt;114.HashMap和Hashtable的区别。&lt;br /&gt;
答：HashMap是Hashtable的轻量级实现（非线程安全的实现），他们都完成了Map接口，主要区别在于HashMap允许空（null）键值（key）,由于非线程安全，效率上可能高于Hashtable.&lt;/p&gt;
&lt;p&gt;115.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? &lt;br /&gt;
答：short s1 = 1; s1 = s1 + 1; （s1+1运算结果是int型，需要强制转换类型） &lt;br /&gt;
short s1 = 1; s1 += 1;（可以正确编译）&lt;/p&gt;
&lt;p&gt;116.Overloaded的方法是否可以改变返回值的类型? &lt;br /&gt;
答：Overloaded的方法是可以改变返回值的类型。&lt;/p&gt;
&lt;p&gt;117.error和exception有什么区别? &lt;br /&gt;
答：error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 &lt;br /&gt;
exception 表示一种设计或实现问题。也就是说，它表示如果程序运行正常，从不会发生的情况。&lt;/p&gt;
&lt;p&gt;118. 和 有什么区别？ &lt;br /&gt;
答：表示绑定的数据源 &lt;br /&gt;
是服务器端代码块&lt;/p&gt;
&lt;p&gt;119.你觉得ASP.NET 2.0（VS2005）和你以前使用的开发工具（.Net 1.0或其他）有什么最大的区别？你在以前的平台上使用的哪些开发思想（pattern / architecture）可以移植到ASP.NET 2.0上 (或者已经内嵌在ASP.NET 2.0中) &lt;br /&gt;
答：1 ASP.NET 2.0 把一些代码进行了封装打包,所以相比1.0相同功能减少了很多代码. &lt;br /&gt;
2 同时支持代码分离和页面嵌入服务器端代码两种模式,以前1.0版本,.NET提示帮助只有在分离的代码文件,无 法 在页面嵌入服务器端代码获得帮助提示, &lt;br /&gt;
3 代码和设计界面切换的时候,2.0支持光标定位.这个我比较喜欢 &lt;br /&gt;
4 在绑定数据,做表的分页.Update,Delete,等操作都可以可视化操作,方便了初学者 &lt;br /&gt;
5 在ASP.NET中增加了40多个新的控件,减少了工作量&lt;/p&gt;
&lt;p&gt;120.重载与覆盖的区别？ &lt;br /&gt;
答：1、方法的覆盖是子类和父类之间的关系，是垂直关系；方法的重载是同一个类中方法之间的关系，是水平关系 &lt;br /&gt;
2、覆盖只能由一个方法，或只能由一对方法产生关系；方法的重载是多个方法之间的关系。 &lt;br /&gt;
3、覆盖要求参数列表相同；重载要求参数列表不同。 &lt;br /&gt;
4、覆盖关系中，调用那个方法体，是根据对象的类型（对象对应存储空间类型）来决定；重载关系，是根据调 用时的实参表与形参表来选择方法体的。&lt;/p&gt;
&lt;p&gt;121.描述一下C#中索引器的实现过程，是否只能根据数字进行索引？  &lt;br /&gt;
答：不是。可以用任意类型。&lt;/p&gt;
&lt;p&gt;122.在C＃中，string str = null 与 string str = " " 请尽量使用文字或图象说明其中的区别。 &lt;br /&gt;
答：null是没有空间引用的； &lt;br /&gt;
" " 是空间为0的字符串；&lt;/p&gt;
&lt;p&gt;123.分析以下代码，完成填空 &lt;br /&gt;
string strTmp = "abcdefg某某某";  &lt;br /&gt;
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;  &lt;br /&gt;
int j= strTmp.Length; &lt;br /&gt;
以上代码执行完后，i= j=  &lt;br /&gt;
答：i=13.j=10&lt;/p&gt;
&lt;p&gt;124.SQLSERVER服务器中，给定表 table1 中有两个字段 ID、LastUpdateDate，ID表示更新的事务号， LastUpdateDate表示更新时的服务器时间，请使用一句SQL语句获得最后更新的事务号 &lt;br /&gt;
答：Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1) &lt;/p&gt;
&lt;p&gt;125.分析以下代码。 &lt;br /&gt;
public static void test(string ConnectString) &lt;/p&gt;
&lt;p&gt;{ &lt;/p&gt;
&lt;p&gt;System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();  &lt;br /&gt;
conn.ConnectionString = ConnectString;  &lt;br /&gt;
try &lt;/p&gt;
&lt;p&gt;{  &lt;br /&gt;
conn.Open();  &lt;br /&gt;
…….  &lt;br /&gt;
} &lt;br /&gt;
catch(Exception Ex)  &lt;br /&gt;
{  &lt;br /&gt;
MessageBox.Show(Ex.ToString());  &lt;br /&gt;
} &lt;br /&gt;
finally  &lt;br /&gt;
{ &lt;/p&gt;
&lt;p&gt;if (!conn.State.Equals(ConnectionState.Closed))  &lt;br /&gt;
conn.Close();  &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
请问 &lt;/p&gt;
&lt;p&gt;1)以上代码可以正确使用连接池吗？ &lt;/p&gt;
&lt;p&gt;答：回答：如果传入的connectionString是一模一样的话，可以正确使用连接池。不过一模一样的意思是，连字符的空格数，顺序完全一致。 &lt;/p&gt;
&lt;p&gt;2)以上代码所使用的异常处理方法，是否所有在test方法内的异常都可以被捕捉并显示出来？ &lt;/p&gt;
&lt;p&gt;答：只可以捕捉数据库连接中的异常吧. （finally中，catch中，如果有别的可能引发异常的操作，也应该用try,catch。所以理论上并非所有异常都会被捕捉。） &lt;/p&gt;
&lt;p&gt;126.公司要求开发一个继承System.Windows.Forms.ListView类的组件，要求达到以下的特殊功能：点击ListView各列列头时，能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识，请简要谈一下您的思路： &lt;br /&gt;
答：根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中&lt;/p&gt;
&lt;p&gt;127.什么是WSE？目前最新的版本是多少？ &lt;br /&gt;
答：WSE (Web Service Extension) 包来提供最新的WEB服务安全保证，目前最新版本2.0。&lt;/p&gt;
&lt;p&gt;128.在下面的例子里&lt;br /&gt;
using System;&lt;br /&gt;
class A&lt;br /&gt;
{&lt;br /&gt;
public A(){&lt;br /&gt;
PrintFields();&lt;br /&gt;
}&lt;br /&gt;
public virtual void PrintFields(){}&lt;br /&gt;
}&lt;br /&gt;
class B:A&lt;br /&gt;
{&lt;br /&gt;
int x=1;&lt;br /&gt;
int y;&lt;br /&gt;
public B(){&lt;br /&gt;
y=-1;&lt;br /&gt;
}&lt;br /&gt;
public override void PrintFields(){&lt;br /&gt;
Console.WriteLine("x={0},y={1}",x,y);&lt;br /&gt;
}&lt;br /&gt;
当使用new B()创建B的实例时，产生什么输出？&lt;br /&gt;
答：X=1,Y=0&lt;/p&gt;
&lt;p&gt;129.下面的例子中&lt;br /&gt;
using System;&lt;br /&gt;
class A&lt;br /&gt;
{&lt;br /&gt;
public static int X;&lt;br /&gt;
static A(){&lt;br /&gt;
X=B.Y+1;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
class B&lt;br /&gt;
{&lt;br /&gt;
public static int Y=A.X+1;&lt;br /&gt;
static B(){}&lt;br /&gt;
static void Main(){&lt;br /&gt;
Console.WriteLine("X={0},Y={1}",A.X,B.Y);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
产生的输出结果是什么？&lt;br /&gt;
答：x=1,y=2&lt;/p&gt;
&lt;p&gt;130.abstract class和interface有什么区别?&lt;br /&gt;
答：声明方法的存在而不去实现它的类被叫做抽像类（abstract class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽像类，并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现，否则它们也是抽像类为。取而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。&lt;br /&gt;
接口（interface）是抽像类的变体。在接口中，所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的，没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。然后，它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类，它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换，instanceof 运算符可以用来决定某对象的类是否实现了接口。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
相关链接：&lt;a href="http://blog.csiis.net/baicaps/archive/2009/09/04/asp.net.aspx" target="_self"&gt;全面的ASP.NET面试题目集锦（1）&lt;/a&gt;&lt;br /&gt;
 &lt;/p&gt;
&lt;img src="http://blog.rongzhiwang.com/baicaps/aggbug/67.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>baicaps</dc:creator>
            <guid>http://blog.rongzhiwang.com/baicaps/archive/2009/09/04/asp.net2.aspx</guid>
            <pubDate>Fri, 04 Sep 2009 15:05:52 GMT</pubDate>
            <wfw:comment>http://blog.rongzhiwang.com/baicaps/comments/67.aspx</wfw:comment>
            <comments>http://blog.rongzhiwang.com/baicaps/archive/2009/09/04/asp.net2.aspx#feedback</comments>
            <wfw:commentRss>http://blog.rongzhiwang.com/baicaps/comments/commentRss/67.aspx</wfw:commentRss>
            <trackback:ping>http://blog.rongzhiwang.com/baicaps/services/trackbacks/67.aspx</trackback:ping>
        </item>
        <item>
            <title>全面的ASP.NET面试题目集锦（1）</title>
            <link>http://blog.rongzhiwang.com/baicaps/archive/2009/09/04/asp.net.aspx</link>
            <description>&lt;p&gt;对ASP.NET程序员来说，面试时经常遇到一些技术问题。本文为您收集130道常见的ASP.NET面试题目，供大家参考。&lt;/p&gt;
&lt;p&gt;1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 &lt;br /&gt;
答 . private : 私有成员, 在类的内部才可以访问。  &lt;br /&gt;
protected : 保护成员，该类内部和继承类中可以访问。  &lt;br /&gt;
public : 公共成员，完全公开，没有访问限制。  &lt;br /&gt;
internal: 在同一命名空间内可以访问。&lt;/p&gt;
&lt;p&gt;2 .列举ASP.NET 页面之间传递值的几种方式。  &lt;br /&gt;
答. 1.使用QueryString, 如....?id=1; response. Redirect()....  &lt;br /&gt;
2.使用Session变量  &lt;br /&gt;
3.使用Server.Transfer&lt;/p&gt;
&lt;p&gt;3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少， 用递归算法实现。&lt;br /&gt;
答：public class MainClass  &lt;br /&gt;
{  &lt;br /&gt;
public static void Main()  &lt;br /&gt;
{  &lt;br /&gt;
Console.WriteLine(Foo(30));  &lt;br /&gt;
}  &lt;br /&gt;
public static int Foo(int i)  &lt;br /&gt;
{  &lt;br /&gt;
if (i &amp;lt;= 0)  &lt;br /&gt;
return 0;  &lt;br /&gt;
else if(i &amp;gt; 0 &amp;amp;&amp;amp; i &amp;lt;= 2)  &lt;br /&gt;
return 1;  &lt;br /&gt;
else return Foo(i -1) + Foo(i - 2);  &lt;br /&gt;
}  &lt;br /&gt;
} &lt;/p&gt;
&lt;p&gt;4.C#中的委托是什么？事件是不是一种委托？ &lt;br /&gt;
答 ：  &lt;br /&gt;
委托可以把一个方法作为参数代入另一个方法。 &lt;br /&gt;
委托可以理解为指向一个函数的引用。 &lt;br /&gt;
是，是一种特殊的委托&lt;/p&gt;
&lt;p&gt;5.override与重载的区别 &lt;br /&gt;
答 ： &lt;br /&gt;
override 与重载的区别。重载是方法的名称相同。参数或参数类型不同，进行多次重载以适应不同的需要 &lt;br /&gt;
Override 是进行基类中函数的重写。为了适应需要。&lt;/p&gt;
&lt;p&gt;6.如果在一个B/S结构的系统中需要传递变量值，但是又不能使用Session、Cookie、Application，您有几种方法进行处理？ &lt;br /&gt;
答 ：  &lt;br /&gt;
this.Server.Transfer&lt;/p&gt;
&lt;p&gt;7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty？ &lt;br /&gt;
答： &lt;br /&gt;
foreach (System.Windows.Forms.Control control in this.Controls) &lt;br /&gt;
{ &lt;br /&gt;
if (control is System.Windows.Forms.TextBox) &lt;br /&gt;
{ &lt;br /&gt;
System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;  &lt;br /&gt;
tb.Text = String.Empty ; &lt;br /&gt;
} &lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;8.请编程实现一个冒泡排序算法？ &lt;br /&gt;
答： &lt;br /&gt;
int [] array = new int  &lt;br /&gt;
; &lt;br /&gt;
int temp = 0 ; &lt;br /&gt;
for (int i = 0 ; i &amp;lt; array.Length - 1 ; i++) &lt;br /&gt;
{ &lt;br /&gt;
for (int j = i + 1 ; j &amp;lt; array.Length ; j++) &lt;br /&gt;
{ &lt;br /&gt;
if (array[j] &amp;lt; array[i]) &lt;br /&gt;
{ &lt;br /&gt;
temp = array[i] ; &lt;br /&gt;
array[i] = array[j] ; &lt;br /&gt;
array[j] = temp ; &lt;br /&gt;
} &lt;br /&gt;
} &lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;9.描述一下C#中索引器的实现过程，是否只能根据数字进行索引？ &lt;br /&gt;
答：不是。可以用任意类型。&lt;/p&gt;
&lt;p&gt;10.求以下表达式的值，写出您想到的一种或几种实现方法： 1-2+3-4+……+m&lt;br /&gt;
答： &lt;br /&gt;
int Num = this.TextBox1.Text.ToString() ; &lt;br /&gt;
int Sum = 0 ; &lt;br /&gt;
for (int i = 0 ; i &amp;lt; Num + 1 ; i++) &lt;br /&gt;
{ &lt;br /&gt;
if((i%2) == 1) &lt;br /&gt;
{ &lt;br /&gt;
Sum += i ; &lt;br /&gt;
} &lt;br /&gt;
else &lt;br /&gt;
{ &lt;br /&gt;
Sum = Sum - I ; &lt;br /&gt;
} &lt;br /&gt;
} &lt;br /&gt;
System.Console.WriteLine(Sum.ToString()); &lt;br /&gt;
System.Console.ReadLine() ;&lt;/p&gt;
&lt;p&gt;11.用.net做B/S结构的系统，您是用几层结构来开发，每一层之间的关系以及为什么要这样分层？ &lt;br /&gt;
答：一般为3层 &lt;br /&gt;
数据访问层，业务层，表示层。 &lt;br /&gt;
数据访问层对数据库进行增删查改。 &lt;br /&gt;
业务层一般分为二层，业务表观层实现与表示层的沟通，业务规则层实现用户密码的安全等。 &lt;br /&gt;
表示层为了与用户交互例如用户添加表单。 &lt;br /&gt;
优点： 分工明确，条理清晰，易于调试，而且具有可扩展性。 &lt;br /&gt;
缺点： 增加成本。&lt;/p&gt;
&lt;p&gt;12.在下面的例子里 &lt;br /&gt;
using System; &lt;br /&gt;
class A &lt;br /&gt;
{ &lt;br /&gt;
public A() &lt;br /&gt;
{ &lt;br /&gt;
PrintFields(); &lt;br /&gt;
} &lt;br /&gt;
public virtual void PrintFields(){} &lt;br /&gt;
} &lt;br /&gt;
class B:A &lt;br /&gt;
{ &lt;br /&gt;
int x=1; &lt;br /&gt;
int y; &lt;br /&gt;
public B() &lt;br /&gt;
{ &lt;br /&gt;
y=-1; &lt;br /&gt;
} &lt;br /&gt;
public override void PrintFields() &lt;br /&gt;
{ &lt;br /&gt;
Console.WriteLine("x={0},y={1}",x,y); &lt;br /&gt;
} &lt;br /&gt;
当使用new B()创建B的实例时，产生什么输出？ &lt;br /&gt;
答：X=1,Y=0;x= 1 y = -1&lt;/p&gt;
&lt;p&gt;13.什么叫应用程序域？ &lt;br /&gt;
答：应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。&lt;/p&gt;
&lt;p&gt;14.CTS、CLS、CLR分别作何解释？ &lt;br /&gt;
答：CTS：通用语言系统。CLS：通用语言规范。CLR：公共语言运行库。&lt;/p&gt;
&lt;p&gt;15.什么是装箱和拆箱？ &lt;br /&gt;
答：从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。&lt;/p&gt;
&lt;p&gt;16.什么是受管制的代码？ &lt;br /&gt;
答：unsafe：非托管代码。不经过CLR运行。&lt;/p&gt;
&lt;p&gt;17.什么是强类型系统？ &lt;br /&gt;
答：RTTI：类型识别系统。&lt;/p&gt;
&lt;p&gt;18.net中读写数据库需要用到那些类？他们的作用？ &lt;br /&gt;
答：DataSet:数据存储器。 &lt;br /&gt;
DataCommand:执行语句命令。 &lt;br /&gt;
DataAdapter:数据的集合，用语填充。&lt;/p&gt;
&lt;p&gt;19.ASP.net的身份验证方式有哪些？分别是什么原理？ &lt;br /&gt;
答：10。Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥)&lt;/p&gt;
&lt;p&gt;20.什么是Code-Behind技术？ &lt;br /&gt;
答：代码后植。&lt;/p&gt;
&lt;p&gt;21.在.net中，配件的意思是？ &lt;br /&gt;
答：程序集。（中间语言，源数据，资源，装配清单）&lt;/p&gt;
&lt;p&gt;22.常用的调用WebService的方法有哪些？ &lt;br /&gt;
答：1.使用WSDL.exe命令行工具。 &lt;br /&gt;
2.使用VS.NET中的Add Web Reference菜单选项&lt;/p&gt;
&lt;p&gt;23..net Remoting 的工作原理是什么？ &lt;br /&gt;
答：服务器端向客户端发送一个进程编号，一个程序域编号，以确定对象的位置。&lt;/p&gt;
&lt;p&gt;24.在C＃中，string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。  &lt;br /&gt;
答：string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。&lt;/p&gt;
&lt;p&gt;25.请详述在dotnet中类(class)与结构(struct)的异同？ &lt;br /&gt;
答：Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的. &lt;br /&gt;
&lt;br /&gt;
 &lt;/p&gt;
&lt;p&gt;26.根据委托(delegate)的知识，请完成以下用户控件中代码片段的填写：  &lt;br /&gt;
namespace test  &lt;br /&gt;
{  &lt;br /&gt;
public delegate void OnDBOperate();  &lt;br /&gt;
public class UserControlBase : System.Windows.Forms.UserControl  &lt;br /&gt;
{  &lt;br /&gt;
public event OnDBOperate OnNew;  &lt;br /&gt;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)&lt;br /&gt;
{  &lt;br /&gt;
if(e.Button.Equals(BtnNew))  &lt;br /&gt;
{  &lt;br /&gt;
//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。 &lt;br /&gt;
}  &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
答：if( OnNew != null )  &lt;br /&gt;
OnNew( this, e ); &lt;/p&gt;
&lt;p&gt;27.分析以下代码，完成填空  &lt;br /&gt;
string strTmp = "abcdefg某某某";  &lt;br /&gt;
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;  &lt;br /&gt;
int j= strTmp.Length;  &lt;br /&gt;
以上代码执行完后，i= j=  &lt;br /&gt;
答：i=13,j=10 &lt;/p&gt;
&lt;p&gt;28.SQLSERVER服务器中，给定表 table1 中有两个字段 ID、LastUpdateDate，ID表示更新的事务号， LastUpdateDate表示更新时的服务器时间，请使用一句SQL语句获得最后更新的事务号 &lt;br /&gt;
答：Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1) &lt;/p&gt;
&lt;p&gt;29.根据线程安全的相关知识，分析以下代码，当调用test方法时i&amp;gt;10时是否会引起死锁?并简要说明理由。 &lt;br /&gt;
public void test(int i)  &lt;br /&gt;
{  &lt;br /&gt;
lock(this)  &lt;br /&gt;
{  &lt;br /&gt;
if (i&amp;gt;10)  &lt;br /&gt;
{  &lt;br /&gt;
i--;  &lt;br /&gt;
test(i);  &lt;br /&gt;
}  &lt;br /&gt;
}  &lt;br /&gt;
} &lt;br /&gt;
答：不会发生死锁，（但有一点int是按值传递的，所以每次改变的都只是一个副本，因此不会出现死锁。但如果把int换做一个object，那么死锁会发生）&lt;/p&gt;
&lt;p&gt;30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 &lt;br /&gt;
答：WS主要是可利用HTTP，穿透防火墙。而Remoting可以利用TCP/IP，二进制传送提高效率。&lt;/p&gt;
&lt;p&gt;31.公司要求开发一个继承System.Windows.Forms.ListView类的组件，要求达到以下的特殊功能：点击ListView各列列头时，能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识，请简要谈一下您的思路 &lt;br /&gt;
答：根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。&lt;/p&gt;
&lt;p&gt;32.给定以下XML文件，完成算法流程图。 &lt;br /&gt;
&lt;filesystem /&gt;  &lt;br /&gt;
&amp;lt; DriverC &amp;gt;  &lt;br /&gt;
 &lt;/p&gt;
&lt;dir dirname="”MSDOS622”"&gt;&lt;br /&gt;
&lt;file filename="”" /&gt;  &lt;br /&gt;
&lt;/dir&gt;
&lt;p&gt;  &lt;br /&gt;
&lt;file filename="”MSDOS.SYS”" /&gt;  &lt;br /&gt;
&lt;file filename="”" /&gt;  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
请画出遍历所有文件名（FileName）的流程图(请使用递归算法)。 &lt;br /&gt;
答： &lt;br /&gt;
void FindFile( Directory d )  &lt;br /&gt;
{  &lt;br /&gt;
FileOrFolders = d.GetFileOrFolders();  &lt;br /&gt;
foreach( FileOrFolder fof in FileOrFolders )  &lt;br /&gt;
{  &lt;br /&gt;
if( fof is File )  &lt;br /&gt;
You Found a file;  &lt;br /&gt;
else if ( fof is Directory )  &lt;br /&gt;
FindFile( fof );  &lt;br /&gt;
}  &lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;33.写出一条Sql语句：取出表A中第31到第40记录（SQLServer,以自动增长的ID作为主键,注意：ID可能不是连续的。 &lt;br /&gt;
答：解1: select top 10 * from A where id not in (select top 30 id from A)  &lt;br /&gt;
解2: select top 10 * from A where id &amp;gt; (select max(id) from (select top 30 id from A )as A) &lt;/p&gt;
&lt;p&gt;34.面向对象的语言具有________性、_________性、________性 &lt;br /&gt;
答：封装、继承、多态。&lt;/p&gt;
&lt;p&gt;35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。 &lt;br /&gt;
答：IEnumerable 、 GetEnumerator。&lt;/p&gt;
&lt;p&gt;36.GC是什么? 为什么要有GC? &lt;br /&gt;
答：GC是垃圾收集器。程序员不用担心内存管理，因为垃圾收集器会自动进行管理。要请求垃圾收集，可以调用下面的方法之一：  &lt;br /&gt;
System.gc() &lt;br /&gt;
Runtime.getRuntime().gc()&lt;/p&gt;
&lt;p&gt;37.String s = new String("xyz");创建了几个String Object? &lt;br /&gt;
答：两个对象，一个是“xyx”,一个是指向“xyx”的引用对象s。&lt;/p&gt;
&lt;p&gt;38.abstract class和interface有什么区别? &lt;br /&gt;
答：声明方法的存在而不去实现它的类被叫做抽象类（abstract class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽象类，并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 &lt;br /&gt;
接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的，没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。然后，它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类，它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换，instanceof 运算符可以用来决定某对象的类是否实现了接口。&lt;/p&gt;
&lt;p&gt;39.启动一个线程是用run()还是start()? &lt;br /&gt;
答：启动一个线程是调用start()方法，使线程所代表的虚拟处理机处于可运行状态，这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。&lt;/p&gt;
&lt;p&gt;40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? &lt;br /&gt;
答：接口可以继承接口。抽象类可以实现(implements)接口，抽象类是否可继承实体类，但前提是实体类必须有明确的构造函数。&lt;/p&gt;
&lt;p&gt;41.构造器Constructor是否可被override? &lt;br /&gt;
答：构造器Constructor不能被继承，因此不能重写Overriding，但可以被重载Overloading。&lt;/p&gt;
&lt;p&gt;42.是否可以继承String类? &lt;br /&gt;
答：String类是final类故不可以继承。&lt;/p&gt;
&lt;p&gt;43.try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后? &lt;br /&gt;
答：会执行，在return前执行。&lt;/p&gt;
&lt;p&gt;44.两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对? &lt;br /&gt;
答：不对，有相同的hash code。&lt;/p&gt;
&lt;p&gt;45.swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上? &lt;br /&gt;
答：switch（expr1）中，expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。&lt;/p&gt;
&lt;p&gt;47.当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法? &lt;br /&gt;
不能，一个对象的一个synchronized方法只能由一个线程访问。&lt;/p&gt;
&lt;p&gt;48.abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized? &lt;br /&gt;
答：都不能。&lt;/p&gt;
&lt;p&gt;49.List, Set, Map是否继承自Collection接口? &lt;br /&gt;
答：List，Set是Map不是&lt;/p&gt;
&lt;p&gt;50.Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? &lt;br /&gt;
答：Set里的元素是不能重复的，那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 &lt;br /&gt;
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖，为的是当两个分离的对象的内容和类型相配的话，返回真值。&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
 相关链接：&lt;a href="http://blog.csiis.net/baicaps/archive/2009/09/04/asp.net2.aspx" target="_self"&gt;全面的ASP.NET面试题目集锦（2）&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://blog.rongzhiwang.com/baicaps/aggbug/66.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>baicaps</dc:creator>
            <guid>http://blog.rongzhiwang.com/baicaps/archive/2009/09/04/asp.net.aspx</guid>
            <pubDate>Fri, 04 Sep 2009 14:59:11 GMT</pubDate>
            <wfw:comment>http://blog.rongzhiwang.com/baicaps/comments/66.aspx</wfw:comment>
            <comments>http://blog.rongzhiwang.com/baicaps/archive/2009/09/04/asp.net.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.rongzhiwang.com/baicaps/comments/commentRss/66.aspx</wfw:commentRss>
            <trackback:ping>http://blog.rongzhiwang.com/baicaps/services/trackbacks/66.aspx</trackback:ping>
        </item>
        <item>
            <title>VS.Net 的一些小技巧</title>
            <link>http://blog.rongzhiwang.com/baicaps/archive/2009/08/16/vs.net.aspx</link>
            <description>&lt;p&gt;1&lt;span style="font-family: 宋体"&gt;、注释或重复代码片断&lt;br /&gt;
    &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在我们写代码的往往要写代码注释，可是在每个类中写这些注释的文字是不是很烦，如果你每次用复制，粘贴的花是不是也是很麻烦，如果我们能想拖控件一样，拖到代码文件中多好啊，其实在在&lt;/span&gt;Vs&lt;span style="font-family: 宋体"&gt;中是可能的，我们只要把我们的代码块选中，然后在代码模式中向工具箱中把这个代码快直接拖到工具箱中就行了，接下来，我们在要注释的地方直接把这个“控件”拖到我们的代码中就行了，是不是很酷！ &lt;br /&gt;
             &lt;img style="width: 481px; height: 216px" border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/Vs.net/vs_1.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;2&lt;span style="font-family: 宋体"&gt;、格式化整个块&lt;/span&gt;&lt;/p&gt;
    &lt;span style="font-family: 宋体"&gt;我们在编写代码，或者从别人的&lt;/span&gt;Html&lt;span style="font-family: 宋体"&gt;源文件中粘贴一段&lt;/span&gt;Html&lt;span style="font-family: 宋体"&gt;代码粘到我们的&lt;/span&gt;Vs&lt;span style="font-family: 宋体"&gt;中的设计模式中的时候，是不是格式都是原模原样的，编写代码的时候，&lt;/span&gt;Vs&lt;span style="font-family: 宋体"&gt;可以很好的给我们用很整齐的格式排列好，方便阅读，可是粘到&lt;/span&gt;vs&lt;span style="font-family: 宋体"&gt;设计模式下的&lt;/span&gt;Html&lt;span style="font-family: 宋体"&gt;代码的就不能保证这么有格式了，以至于我们在查找某个标记是否关闭的时候，全部都是红色的波浪线，特别的头痛。现在有一个方便的方法，让&lt;/span&gt;vs&lt;span style="font-family: 宋体"&gt;为我们做这个排版的工作，我们可以从编辑&lt;/span&gt;—&lt;span style="font-family: 宋体"&gt;高级&lt;/span&gt;—&lt;span style="font-family: 宋体"&gt;下点击设计文档的格式，那么我们的代码或者&lt;/span&gt;Html&lt;span style="font-family: 宋体"&gt;就很整齐的排版好了。快捷键：Ctrl+K+D&lt;br /&gt;
&lt;br /&gt;
                    &lt;img style="width: 399px; height: 189px" border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/Vs.net/vs_2.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                            (html混乱)&lt;br /&gt;
用Ctrl+K+D后&lt;br /&gt;
&lt;br /&gt;
                 &lt;img style="width: 478px; height: 180px" border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/Vs.net/vs_3.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         现在的Html标记是不是按着层次排好了！同样适用于cs代码&lt;br /&gt;
  &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;
&lt;p&gt;3&lt;span style="font-family: 宋体"&gt;、创建区域选择&lt;br /&gt;
   &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;VS.NET&lt;span style="font-family: 宋体"&gt;中通过按住&lt;/span&gt;Alt&lt;span style="font-family: 宋体"&gt;键，拖运鼠标在一个矩形区域上来做一个区域选择。不知道你是否这样选择过区域？这个技巧允许你创造一个区域并不包含其间的行（见图&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;）。通过这个方法非常容易拷贝，剪切，粘贴矩形区域块。   &lt;br /&gt;
                         &lt;br /&gt;
&lt;br /&gt;
                   &lt;img style="width: 455px; height: 239px" border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/Vs.net/vs_6.gif" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;      你可能惊奇为什么有人需要这个深奥的特性。事实上，我经常使用它在上特定的文档段落中作一个目标查找&lt;/span&gt;-&lt;span style="font-family: 宋体"&gt;替换操作，但是由于常规的自动换行选项使得我没有办法这样作。我相信你会发现这个特性是非常方便的。&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;4&lt;span style="font-family: 宋体"&gt;、查找匹配的标记&lt;br /&gt;
     &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;某些标识总是成对出现。例如，“&lt;/span&gt;{&lt;span style="font-family: 宋体"&gt;”标识必须用对应的“&lt;/span&gt;}&lt;span style="font-family: 宋体"&gt;”标识关闭。虽然在&lt;/span&gt;Vs2005&lt;span style="font-family: 宋体"&gt;你点击一个&lt;/span&gt;{&lt;span style="font-family: 宋体"&gt;，和他匹配的&lt;/span&gt;}&lt;span style="font-family: 宋体"&gt;就会高亮显示，但是如果代码过长的话就不好找了，同样，编译器指示符“&lt;/span&gt;#region&lt;span style="font-family: 宋体"&gt;”必须有对应的“&lt;/span&gt;#endregion&lt;span style="font-family: 宋体"&gt;”指示符。当导航你的代码时，你有时需要查找对应的标识。通过按&lt;/span&gt;Ctrl-]&lt;span style="font-family: 宋体"&gt;你可以这样做。这个快捷键只有当光标在这些标识符的任何一个的下面时才起作用，它会立即跳转到对应的标识符而不管它是开的或闭的标识。&lt;br /&gt;
     &lt;/span&gt;&lt;span style="font-family: 宋体"&gt;如果你想显亮两个匹配的标识之间的所有代码时，按&lt;/span&gt;Ctrl-Shift-]&lt;span style="font-family: 宋体"&gt;显亮整个块，并移动光标到开的标识处。这个快捷键只有当光标在任意的标识的下面时才起作用（如光标在区域内它就不会起作用了）。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;5、跳转的方法的定义&lt;br /&gt;
    &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;当你看到你一个类的方法调用时，你极有可能想看看方法体。在&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;VS.NET&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;中通过上下文菜单实现。在文本编辑器中在方法名称内右击，从弹出菜单中选择到定义。&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;VS.NET&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;立即跳转到这个方法的定义处。这个特性的缺省的快捷键是&lt;/span&gt;&lt;span&gt;F12。&lt;br /&gt;
&lt;br /&gt;
6&lt;span style="font-family: 宋体"&gt;、实用预定义的代码片断&lt;br /&gt;
    &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;代码片断是流行的，预定义的文本模板，开发者能够选择，而不是手工敲入。例如，对&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;Foreach&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;循环，代替敲你需要的所有代码，你能简单地敲&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;foreach&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;。智能感知用新的代码片断图标显示&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;Foreach&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;项（见图）。如果你从智能感知列表中选择代码片项，接着按&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;Tab&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;，&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;VS&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;会插入对于“&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;foreach&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;”的预定义的代码片断。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   &lt;img style="width: 409px; height: 156px" border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/xbf321/Vs.net/vs_7.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7、设计视图和代码(cs)文件切换&lt;br /&gt;
     我们在添加一个.aspx文件的时候，要想切换到后台代码，可以在设计视图下，右击鼠标右键，有一个“查看代码”选项，我们就可以很容易的切换到后台代码中，我们也可以用快捷键F7,来相互切换。&lt;br /&gt;
  8、自定义的字符串大小写切换&lt;br /&gt;
     可能这个小标题命名的不太确切，这里的意思就是如果我们定义了一个想这样的字符串：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt; strValue &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;aaaaaaa&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-family: 宋体"&gt;
&lt;p&gt;   如果我们想让这个aaaaa变成大写的AAAAAA怎么办呢？删掉在重写？其实有个方便的变法就是用Ctrl+Shift+U,这个只能是小写转换成大写，如果我们把大写转换成小写的话就用Ctrl+U.&lt;br /&gt;
&lt;span style="color: #ff0000"&gt;2007-10-31更新&lt;/span&gt;&lt;br /&gt;
   9、整行剪切，复制&lt;br /&gt;
     如果我们在对整行进行剪切，复制的时候，在不选中的情况下怎么复制或剪切呢？我们可以把鼠标移到这一行的前面，然后按下Ctrl+X,或者Ctrl+C，就可以对这整行进行复制，剪切了。(同样适用于粘贴)&lt;br /&gt;
 &lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;img src="http://blog.rongzhiwang.com/baicaps/aggbug/60.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>baicaps</dc:creator>
            <guid>http://blog.rongzhiwang.com/baicaps/archive/2009/08/16/vs.net.aspx</guid>
            <pubDate>Sun, 16 Aug 2009 02:38:11 GMT</pubDate>
            <wfw:comment>http://blog.rongzhiwang.com/baicaps/comments/60.aspx</wfw:comment>
            <comments>http://blog.rongzhiwang.com/baicaps/archive/2009/08/16/vs.net.aspx#feedback</comments>
            <wfw:commentRss>http://blog.rongzhiwang.com/baicaps/comments/commentRss/60.aspx</wfw:commentRss>
            <trackback:ping>http://blog.rongzhiwang.com/baicaps/services/trackbacks/60.aspx</trackback:ping>
        </item>
        <item>
            <title>新版.Net开发必备十大工具 </title>
            <link>http://blog.rongzhiwang.com/baicaps/archive/2009/08/07/.net.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Snippet Compiler&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;   Snippet Compiler是一个基于 &lt;a class="channel_keylink" href="http://windows.chinaitlab.com/" target="_blank"&gt;Windows&lt;/a&gt; 的小型应用程序，你可以通过它来编写、编译和运行代码。如果你具有较小的代码段，并且你不想创建完整的 Visual Studio .NET 项目（以及该项目附带的所有文件），则该工具会很有用。现在Snippet Compiler已经支持.NET Framework 3.5，最新版本为Snippet Compiler Live 2008 Ultimate Edition for Developers (Alpha)，如下图所示：&lt;br /&gt;
   &lt;br /&gt;
  &lt;/p&gt;
&lt;p align="center"&gt;&lt;img alt="" src="http://dotnet.chinaitlab.com/UploadFiles_6597/200806/20080620100836928.JPG" width="475" height="465" twffan="done" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
   &lt;br /&gt;
   官方主页：&lt;a href="http://www.sliver.comhttp//dotnet.chinaitlab.com/SnippetCompiler/"&gt;&lt;font color="#0000ff"&gt;http://www.sliver.comhttp://dotnet.chinaitlab.com/SnippetCompiler/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;  Microsoft Source Analysis for &lt;a class="channel_keylink" href="http://dotnet.chinaitlab.com/List_233.html" target="_blank"&gt;C#&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;   Microsoft Source Analysis for &lt;a class="channel_keylink" href="http://dotnet.chinaitlab.com/List_233.html" target="_blank"&gt;C#&lt;/a&gt;是一款&lt;a class="channel_keylink" href="http://dotnet.chinaitlab.com/List_233.html" target="_blank"&gt;C#&lt;/a&gt;（不支持VB.NET）代码规范检查工具，前身是微软内部代码规范检查和代码格式强制工具StyleCop，目的是帮助项目团队执行一系列常用的源代码格式规范，它会根据预定义的C#代码格式的最佳实践进行检查，与FxCop不同的是它直接对源代码进行检查，且并不提供灵活的规则设置，强制开发者使用相同的习惯进行C#代码的编写。如下图所示：&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p align="center"&gt;&lt;img alt="" src="http://dotnet.chinaitlab.com/UploadFiles_6597/200806/20080620100836727.JPG" width="488" height="373" twffan="done" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GhostDoc&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;   GhostDoc是Visual Studio的一个免费插件，可以帮助开发者生成比较完整规范的XML格式代码注释，如果你的代码遵循微软类库开发人员设计规范 ，由它自动产生的注释就已经完全可以很好地表达开发者创建的方法或者属性的意图，无需手工再进行修改。有了这些标准的XML注释，我们可以使用微软的文档工具Sandcastle生成专业级别的帮助文档。如我们有这样一段代码：&lt;/p&gt;
&lt;p&gt;   &lt;/p&gt;
&lt;table border="1" cellspacing="0" bordercolor="#cccccc" cellpadding="1" width="80%" bgcolor="#ffffff" align="center" heihgt=""&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt; public bool Add(string item) &lt;br /&gt;
            { &lt;br /&gt;
            //...... &lt;br /&gt;
            } &lt;br /&gt;
            &lt;br /&gt;
            public void AppendHtmlText(IHtmlProvider htmlProvider) &lt;br /&gt;
            { &lt;br /&gt;
            //...... &lt;br /&gt;
            }&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;   &lt;br /&gt;
   使用GhostDoc生成的注释如下：&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;table border="1" cellspacing="0" bordercolor="#cccccc" cellpadding="1" width="80%" bgcolor="#ffffff" align="center" heihgt=""&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt; /// &amp;lt;summary&amp;gt; &lt;br /&gt;
            /// Adds the specified item. &lt;br /&gt;
            /// &amp;lt;/summary&amp;gt; &lt;br /&gt;
            /// &amp;lt;param name="item"&amp;gt;The item.&amp;lt;/param&amp;gt; &lt;br /&gt;
            /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt; &lt;br /&gt;
            public bool Add(string item) &lt;br /&gt;
            { &lt;br /&gt;
            //...... &lt;br /&gt;
            } &lt;br /&gt;
            &lt;br /&gt;
            /// &amp;lt;summary&amp;gt; &lt;br /&gt;
            /// Appends the HTML text. &lt;br /&gt;
            /// &amp;lt;/summary&amp;gt; &lt;br /&gt;
            /// &amp;lt;param name="htmlProvider"&amp;gt;The HTML provider.&amp;lt;/param&amp;gt; &lt;br /&gt;
            public void AppendHtmlText(IHtmlProvider htmlProvider) &lt;br /&gt;
            { &lt;br /&gt;
            //...... &lt;br /&gt;
            } &lt;br /&gt;
            &lt;br /&gt;
             &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;
   &lt;br /&gt;
   官方主页：&lt;a href="http://www.roland-weigelt.de/ghostdoc/"&gt;&lt;font color="#0033ff"&gt;http://www.roland-weigelt.de/ghostdoc/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;  &lt;strong&gt; Sandcastle&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;   Sandcastle是微软发布的一个帮助文档生成工具，它通过反射程序集中的源代码和添加代码到中的XML注释来创建专业级别的帮助文档。Sandcastle于2006年推出，它的面世也使得曾经列入.NET开发必备十大工具之一的文档生成工具NDoc的作者Kevin Downs在2006年7月宣告不再投入NDoc Open Source Project的开发。生成的文档效果如下图所示：&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p align="center"&gt;&lt;img alt="" src="http://dotnet.chinaitlab.com/UploadFiles_6597/200806/20080620100837877.JPG" width="459" height="311" twffan="done" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Nunit  + &lt;/strong&gt;TestDriven.Net  &lt;/p&gt;
&lt;p&gt;   NUnit 是为 .NET 框架生成的开放源代码单元&lt;a class="channel_keylink" href="http://softtest.chinaitlab.com/" target="_blank"&gt;测试&lt;/a&gt;框架。NUnit 使你可以用你喜欢的语言编写&lt;a class="channel_keylink" href="http://softtest.chinaitlab.com/" target="_blank"&gt;测试&lt;/a&gt;，从而测试应用程序的特定功能。当你首次编写代码时，单元测试是一种测试代码功能的很好方法，它还提供了一种对应用程序进行回归测试的方法。NUnit 应用程序提供了一个用于编写单元测试的框架，以及一个运行这些测试和查看结果的图形界面。&lt;/p&gt;
&lt;p&gt;   官方主页：&lt;a href="http://www.nunit.org/"&gt;&lt;font color="#0033ff"&gt;http://www.nunit.org&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;    &lt;strong&gt;MyGeneration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;   作为.NET开发人员，手边有一款代码生成工具必不可少。旧版.NET开发必备十大工具中，作者曾经推荐了非常著名的CodeSmith，不幸的是现在CodeSmith已经商业化，需要花钱购买；幸运的是我们又有一款免费并开源的代码生成工具选择MyGeneration，它的功能丝毫不亚于CodeSmith，完全基于模板引擎进行代码的生成，如下图所示：&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p align="center"&gt;&lt;img alt="" src="http://dotnet.chinaitlab.com/UploadFiles_6597/200806/20080620100837763.JPG" width="441" height="339" twffan="done" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
   &lt;br /&gt;
   官方主页：&lt;a href="http://sourceforge.net/projects/mygeneration"&gt;&lt;font color="#0033ff"&gt;http://sourceforge.net/projects/mygeneration&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;   Reflector for .NET&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;   相信大名鼎鼎的Reflector for .NET大家都已经用过了，几年前它已经位于.NET开发必备十大工具榜，现在自然也不能例外。它是一个类浏览器和反编译器，可以分析程序集并向你展示它的所有秘密。使用Reflector for .NET可以浏览程序集的类和方法，可以分析由这些类和方法生成的 Microsoft 中间语言 (MSIL)，并且可以反编译这些类和方法并查看 C# 或 Visual Basic.NET 中的等价类和方法。经过多年的发展，Reflector for .NET已经发展到了5.1版本，并且提供了相当丰富的插件，利用这些插件我们可以浏览Silverlight程序结构、浏览WPF资源文件、与TestDriven.net集成等。如下图所示：&lt;br /&gt;
   &lt;br /&gt;
  &lt;/p&gt;
&lt;p align="center"&gt;&lt;img alt="" src="http://dotnet.chinaitlab.com/UploadFiles_6597/200806/20080620100837152.JPG" width="460" height="339" twffan="done" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The Regulator&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;   The Regulator能够使生成和测试正则表达式变得很容易，它允许你输入一个正则表达式以及一些针对其运行该表达式的输入。这样，在应用程序中实现该正则表达式之前，你便可以了解它将产生什么效果以及它将返回哪些种类的匹配项。另外它还提供了正则表达式库管理功能，在线更新正则表达式库，可以在RegexLib.com上搜索需要的正则表达式，如下图所示：&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p align="center"&gt;&lt;img alt="" src="http://dotnet.chinaitlab.com/UploadFiles_6597/200806/20080620100838793.JPG" width="450" height="328" twffan="done" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
   &lt;br /&gt;
   官方主页：&lt;a href="http://sourceforge.net/projects/regulator/"&gt;&lt;font color="#0033ff"&gt;http://sourceforge.net/projects/regulator/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;    LINQPad&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;    随着在.NET Framework 3.5中对于LINQ的支持，越来越多的开发者在开发中使用了LINQ to SQL，但是编写LINQ to SQL查询似乎又成了一件很麻烦的事情，好在我们还有LINQPad这个工具，用来编写LINQ查询，不仅仅是LINQ to SQL，同时它也支持LINQ to XML、LINQ to Objects，另外LINQPad是完全免费的且无需安装，只要&lt;a class="channel_keylink" href="http://download.chinaitlab.com/" target="_blank"&gt;下载&lt;/a&gt;它的可执行文件就可以了。官方主页：&lt;a href="http://www.linqpad.net/"&gt;&lt;font color="#333333"&gt;http://www.linqpad.net/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;   NAnt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;   NAnt 是一个基于 .NET 的生成工具，与当前版本的 Visual Studio .NET 不同，它使得为你的项目创建生成过程变得非常容易。当你拥有大量从事单个项目的开发人员时，你不能依赖于从单个用户的座位进行生成。你也不希望必须定期手动生成该项目。你更愿意创建每天晚上运行的自动生成过程。NAnt 使你可以生成解决方案、复制文件、运行 NUnit 测试、发送电子邮件，等等。遗憾的是，NAnt 缺少漂亮的图形界面，但它的确具有可以指定应该在生成过程中完成哪些任务的控制台应用程序和 XML 文件。目前NAnt已经支持.NET Framework 3.5，它的最新版本是0.86 Beta 1。官方主页：&lt;a href="http://nant.sourceforge.net/"&gt;&lt;font color="#333333"&gt;http://nant.sourceforge.net/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://blog.rongzhiwang.com/baicaps/aggbug/57.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>baicaps</dc:creator>
            <guid>http://blog.rongzhiwang.com/baicaps/archive/2009/08/07/.net.aspx</guid>
            <pubDate>Fri, 07 Aug 2009 12:56:05 GMT</pubDate>
            <wfw:comment>http://blog.rongzhiwang.com/baicaps/comments/57.aspx</wfw:comment>
            <comments>http://blog.rongzhiwang.com/baicaps/archive/2009/08/07/.net.aspx#feedback</comments>
            <wfw:commentRss>http://blog.rongzhiwang.com/baicaps/comments/commentRss/57.aspx</wfw:commentRss>
            <trackback:ping>http://blog.rongzhiwang.com/baicaps/services/trackbacks/57.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET Web应用程序安全解决方案浅析</title>
            <link>http://blog.rongzhiwang.com/baicaps/archive/2009/07/30/asp.net-web.aspx</link>
            <description>&lt;div class="postText"&gt;&lt;span&gt;一、&lt;/span&gt;ASP.NET Web&lt;span style="font-family: SimSun"&gt;应用程序架构安全隐患&lt;/span&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;对于程序集主要威胁：未验证的访问、反向工程、代码注入、通过异常获得程序信息、未审核访问。&lt;/span&gt; &lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;客户端与&lt;/span&gt;Web&lt;span style="font-family: SimSun"&gt;应用程序之间的安全隐患：代码注入（跨站点脚本或缓冲区溢出攻击）、网络监控（密码和敏感应用程序数据探测）、参数破解（表单字段、查询字符串、&lt;/span&gt;Cookie&lt;span style="font-family: SimSun"&gt;、视图状态、&lt;/span&gt;HTTP&lt;span style="font-family: SimSun"&gt;头信息）、会话状态变量&lt;/span&gt;ID&lt;span style="font-family: SimSun"&gt;取得、信息获取（通常使用异常）。&lt;/span&gt; &lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;Web&lt;span style="font-family: SimSun"&gt;应用程序客户端与企业服务之间的安全隐患：非审核访问、破解配置数据、网络监视、未约束代理、数据复制。&lt;/span&gt; &lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;4.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;Web&lt;span style="font-family: SimSun"&gt;服务客户端及其服务之间的安全隐患：非审核访问、参数破解、配置数据取得、网络监、消息回复。&lt;/span&gt; &lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;5.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;Remoting&lt;span style="font-family: SimSun"&gt;客户端及服务器之间的安全隐患：非审核访问、参数破解、序列化、网络监控。&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;6.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;客户端到数据之间的安全隐患：非审核访问、&lt;/span&gt;SQL&lt;span style="font-family: SimSun"&gt;注入、破解数据模型和链接详细信息、网络监控、破解配置数据、破解面干应用程序数据。&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 10.5pt"&gt;&lt;br /&gt;
* ASP.NET&lt;span style="font-family: SimSun"&gt;安全架构注意事项&lt;br /&gt;
&lt;/span&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;在浏览器认证用户；&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 28.5pt"&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;在浏览器和防火墙通路中&lt;/span&gt;1)&lt;span style="font-family: SimSun"&gt;保护敏感数据&lt;/span&gt;2)&lt;span style="font-family: SimSun"&gt;阻止参数破解&lt;/span&gt;3)&lt;span style="font-family: SimSun"&gt;阻止会话攻击和&lt;/span&gt;Cookie&lt;span style="font-family: SimSun"&gt;回复攻击&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 28.5pt"&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;在&lt;/span&gt;Web&lt;span style="font-family: SimSun"&gt;应用程序侧&lt;/span&gt;1)&lt;span style="font-family: SimSun"&gt;提供安全配置&lt;/span&gt;2)&lt;span style="font-family: SimSun"&gt;处理异常&lt;/span&gt;3)&lt;span style="font-family: SimSun"&gt;审核用户&lt;/span&gt;4)&lt;span style="font-family: SimSun"&gt;验证输入&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 28.5pt"&gt;&lt;span&gt;4.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;应用程序服务器&lt;/span&gt;1)&lt;span style="font-family: SimSun"&gt;认证和审核上传身份&lt;/span&gt;2)&lt;span style="font-family: SimSun"&gt;审核并记录活动和事务&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 28.5pt"&gt;&lt;span&gt;5.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;在应用程序服务器和数据库间保护敏感数据&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 28.5pt"&gt;&lt;span&gt;6.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;数据库中加密或者哈希加密敏感数据&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: SimSun"&gt;二、&lt;/span&gt;ASP.NET Web&lt;span style="font-family: SimSun"&gt;应用程序安全性隐患防治办法&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;防止跨站点脚本攻击（&lt;/span&gt;Cross-Site Scripting Attack&lt;span style="font-family: SimSun"&gt;）&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击方法：在页面通过输入脚本或HTML内容获取敏感数据。&lt;br /&gt;
威胁指数：6&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击结果：应用程序拒绝服务或重启，获得错误堆栈信息（※）推测代码进行下一步攻击。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;※注：在ASP.NET配置文件中如果未关闭CustomErrors则可能导致在出现系统异常时显示错误行代码或数据库连接字符串，泄漏配置数据，造成危险隐患。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;预防措施：ASP.NET控件验证或服务器端输入验证。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 15pt"&gt;采用客户端验证和服务器端验证结合的方式对用户输入进行验证，通过比较控件输入和其HTML译码值的一致性确认输入字符串中是否含有HTML特殊符号，以此作为依据转化HTML特殊符号，防止脚本在回发表示时触发。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm"&gt; &lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;防止&lt;/span&gt;SQL&lt;span style="font-family: SimSun"&gt;注入攻击（&lt;/span&gt;SQL Injection Attack&lt;span style="font-family: SimSun"&gt;）&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击方法：通过画面输入或URL参数修改，利用其作为SQL查询条件的特殊性，将输入SQL文注入并返回结果的攻击。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;威胁指数：9&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击结果：可查询敏感数据并可修改系统数据。&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;预防措施：在数据更新和查询时使用数据库参数对象或使用自定义方法转换输入参数，以使注入&lt;/span&gt;SQL&lt;span style="font-family: SimSun"&gt;文失效。&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;验证用户输入&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;通过客户端验证为主、服务器端验证为辅（当禁用客户端&lt;/span&gt;Javascript&lt;span style="font-family: SimSun"&gt;时服务器端验证就尤为重要）&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;客户端验证主要负责验证用户输入的类型、长度、关联关系的验证（此功能由系统扩展控件提供）；&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;服务器端验证分为两部分：&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 36pt"&gt;&lt;span&gt;1)&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;输入验证&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family: SimSun"&gt;输入验证需要对用户输入文字的&lt;/span&gt;HTML&lt;span style="font-family: SimSun"&gt;特殊字符进行验证，含有特殊字符的要抛出系统错误；数据的长度控制尽量在画面通过控件的允许输入长度进行控制；&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 36pt"&gt;&lt;span&gt;2)&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;数据验证&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 36pt"&gt;&lt;span style="font-family: SimSun"&gt;验证数据类型、长度等；此验证行为在对象上进行。&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;4.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;使用&lt;/span&gt;Hash&lt;span style="font-family: SimSun"&gt;算法保存密码&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;使用&lt;/span&gt;ASP.NET Membership&lt;span style="font-family: SimSun"&gt;管理用户，用户密码使用&lt;/span&gt;Hash&lt;span style="font-family: SimSun"&gt;算法和&lt;/span&gt;Salt&lt;span style="font-family: SimSun"&gt;加密，安全性高；&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;对于其它需要保存的密码，系统基础结构将提供&lt;/span&gt;Hash&lt;span style="font-family: SimSun"&gt;加密算法进行不可反向加密，作为验证凭据，或者先取先用不保存在数据存储中。&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;5.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;数据安全性&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 60pt"&gt;&lt;span&gt;1)&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;加密敏感数据：基础结构应提供&lt;/span&gt;Hash&lt;span style="font-family: SimSun"&gt;加密算法支持数据加密。&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 60pt"&gt;&lt;span&gt;2)&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;XML&lt;span style="font-family: SimSun"&gt;数据安全性：防止&lt;/span&gt;XML&lt;span style="font-family: SimSun"&gt;数据攻击。&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 59.95pt"&gt;攻击方法：XPath注入和XXE（扩展XML实体）注入攻击。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 59.95pt"&gt;威胁指数：8&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 59.95pt"&gt;攻击结果：获得XML文件信息。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 59.95pt"&gt;预防措施：不在XML中保存敏感信息，所有配置文件中的敏感信息需要加密保存，对于要写入XML的数据应先通过验证。&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 60pt"&gt;&lt;span&gt;3)&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;ViewState&lt;span style="font-family: SimSun"&gt;数据安全性：防止从&lt;/span&gt;ViewState&lt;span style="font-family: SimSun"&gt;获取敏感数据。&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 59.95pt"&gt;攻击方法：通过解码ViewState获得敏感信息。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 59.95pt"&gt;威胁指数：6&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 59.95pt"&gt;攻击结果：获得ViewState中的敏感信息。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 59.95pt"&gt;预防措施：禁用ViewState或避免，使用简单控件采用加密方式保存敏感信息。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 59.95pt"&gt;关联问题：使用JSON字符串时注意敏感数据的处理。&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;6.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;存储安全信息到注册表和配置文件&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;控制远程用户对配置文件的访问权限，保护配置文件中的敏感数据。&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;7.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;再发布前修正配置文件&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;为防止错误堆栈信息推测以及通过其它信息查获手段进行攻击，ASP.NET Web应用程序在发布前应对配置文件进行修正。&lt;br /&gt;
 &lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;错误堆栈信息推测攻击&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击方法：造成系统异常，通过错误页上的堆栈信息推测代码进行下一步攻击。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;威胁指数：6&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击结果：推测系统版本和代码逻辑。&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;预&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;防措施：捕&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;获&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;系&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;统&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;异常使用&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;统&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;一&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;页&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;面&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;进&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;行&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;处&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;理不表示&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;错误&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;堆&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;栈&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;信息，&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;将自定&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;义错误节&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;点&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;设&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;置&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;为&lt;/span&gt;&amp;lt;customErrors mode=”Off” /&amp;gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;即可防止&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;错误&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;信息表示&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;给远&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;程&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;用&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;户&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;；同&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;时应&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;关&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;闭调试&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;开关&lt;/span&gt;&amp;lt;compilation defaultLanguage=”vb” debug=”false” /&amp;gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;防止通&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;过调试&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;信息泄漏源代&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;码&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;或&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;进&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;行&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;代&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;码&lt;/span&gt;&lt;span style="font-family: 'ＭＳ 明朝'"&gt;注入。&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;&lt;br /&gt;
同时应该关闭&lt;/span&gt;Trace&lt;span style="font-family: SimSun"&gt;优化性能并防止方法攻击者利用&lt;/span&gt;Trace&lt;span style="font-family: SimSun"&gt;推测代码执行过程和详细内容：&lt;/span&gt;&amp;lt;trace enabled=”false” requestLimit=”10” pageOutput=”false” traceMode = ”SortByTime” /&amp;gt;&lt;br /&gt;
 &lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;对于&lt;/span&gt;Web&lt;span style="font-family: SimSun"&gt;服务要防止远程用户利用&lt;/span&gt;WSDL&lt;span style="font-family: SimSun"&gt;描述进行推测攻击。&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击方法：访问Web服务WSDL文件，获得Web服务相关信息。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;威胁指数：4&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击结果：获得Web服务方法描述，推测Web服务参数，进行下一步攻击。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;预防措施：在配置文件中指定不表示Web方法描述内容，配置文件改修如下：&lt;/p&gt;
&lt;p align="left"&gt;&lt;span&gt;              &lt;/span&gt;&lt;span style="font-family: Courier; color: #231f20; font-size: 9pt"&gt;&amp;lt;webServices&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 52.5pt" align="left"&gt;&lt;span style="font-family: Courier; color: #231f20; font-size: 9pt"&gt;&amp;lt;protocols&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 52.5pt" align="left"&gt;&lt;span style="font-family: Courier; color: #231f20; font-size: 9pt"&gt;&amp;lt;remove name="Documentation"/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left: 52.5pt" align="left"&gt;&lt;span style="font-family: Courier; color: #231f20; font-size: 9pt"&gt;&amp;lt;/protocols&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 21.2pt; margin-left: 21.2pt"&gt;&amp;lt;/webServices&amp;gt;&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt; &lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;8.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;使用&lt;/span&gt;Session&lt;span style="font-family: SimSun"&gt;但不使用&lt;/span&gt;Cookieless&lt;span style="font-family: SimSun"&gt;的&lt;/span&gt;Session&lt;/p&gt;
&lt;p style="margin-left: 18pt"&gt;&lt;span style="font-family: SimSun"&gt;原因：&lt;/span&gt;Cookieless&lt;span style="font-family: SimSun"&gt;的&lt;/span&gt;Session&lt;span style="font-family: SimSun"&gt;将在&lt;/span&gt;URL&lt;span style="font-family: SimSun"&gt;中曝露&lt;/span&gt;SessionID&lt;span style="font-family: SimSun"&gt;，使别人易于利用进行攻击。&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-indent: -18pt; margin-left: 18pt"&gt;&lt;span&gt;9.&lt;span style="font: 7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: SimSun"&gt;预防方向工程&lt;/span&gt;&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击方法：获得程序集使用工具进行反向工程。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;威胁指数：9&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;攻击结果：了解程序逻辑，盗取开发成果。&lt;/p&gt;
&lt;p style="line-height: normal; text-indent: 0mm; margin-left: 18pt"&gt;预防措施：在发布时进行强加密和混淆工程。&lt;br /&gt;
&lt;br /&gt;
 &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: SimSun"&gt;参考：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET Security: 8 Ways to Avoid Attack&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.devx.com/security/Article/20898/1954"&gt;&lt;font color="#000080"&gt;http://www.devx.com/security/Article/20898/1954&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: SimSun"&gt;《&lt;/span&gt;Hacking Exposed Web 2.0 : Web 2.0 Security Secrets and Solutions&lt;span style="font-family: SimSun"&gt;》&lt;/span&gt;,Rich Cannings, Himanshu Dwivedi, Zane Lackey,2008.&lt;/p&gt;
&lt;div id="div_digg"&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div /&gt;
&lt;img src="http://blog.rongzhiwang.com/baicaps/aggbug/43.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>baicaps</dc:creator>
            <guid>http://blog.rongzhiwang.com/baicaps/archive/2009/07/30/asp.net-web.aspx</guid>
            <pubDate>Thu, 30 Jul 2009 15:10:57 GMT</pubDate>
            <wfw:comment>http://blog.rongzhiwang.com/baicaps/comments/43.aspx</wfw:comment>
            <comments>http://blog.rongzhiwang.com/baicaps/archive/2009/07/30/asp.net-web.aspx#feedback</comments>
            <wfw:commentRss>http://blog.rongzhiwang.com/baicaps/comments/commentRss/43.aspx</wfw:commentRss>
            <trackback:ping>http://blog.rongzhiwang.com/baicaps/services/trackbacks/43.aspx</trackback:ping>
        </item>
        <item>
            <title>总结：关于ASP.NET 2.0一些简单而有用的技巧</title>
            <link>http://blog.rongzhiwang.com/baicaps/archive/2009/07/15/asp.net-2.0.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;1、在CallBack之后保持滚动条的位置&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在Asp.Net1.1中，CallBack之后保持滚动条的位置是一件非常痛苦的事情，特别是页中有一个Grid并且想要编辑特定的行。为了不停留在想要得行，页面会重新加载并且必须在顶部向下滚动。在Asp2.0中，只需要简单的在页面的属性中加入MaintainScrollPostionOnPostBack属性即可：&lt;/p&gt;
&lt;p class="code"&gt;&amp;lt;%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeFile="" Inherits="" %&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2、页面加载后设置默认焦点到控件上&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这也是一个非常简单的例子，不需要javascript的辅助即可完成。如果在页面中有一两个textbox，为什么要让用户去点击textbox来开始输入数据呢？是不是可以能够让光标已经停留在textbox进而可以输入数据呢？使用HtmlForm控件的DefaultFocus属性就可以轻易的做到：&lt;/p&gt;
&lt;p class="code"&gt;&amp;lt;form id="frm" DefaultFocus="txtUserName" runat="server"&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3、用户点击“Enter”键时触发默认按钮的click实践。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在Asp1.1中，想要使用户点击“Enter”键就能关联到一个button的服务器段的click事件需要借助于javascript，这是很痛苦的。幸好，现在可你使用HtmlForm控件的DefaultButton属性来设置。这个属性也可以设置到Panel控件上，当用户移动到页面中不同的Panel上，点击enter键来触发不同的button控件的click事件。&lt;/p&gt;
&lt;p class="code"&gt;   &amp;lt;form id="frm" DefaultButton="btnSubmit" runat="server"&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
   &amp;lt;/form&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4、简单的寻找固定的控件。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在页面的控件中按层次寻找控件很痛苦，但是如果你知道控件怎样固定在页面中，就可以用简写”$”来查找控件而不用写递归的代码。请看下面代码，注意”$”的使用：&lt;/p&gt;
&lt;p class="code"&gt;&amp;lt;form id="form1" runat="server" DefaultFocus="formVw$txtName"&amp;gt;&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;asp:FormView ID="formVw" runat="server"&amp;gt;&lt;br /&gt;
            &amp;lt;ItemTemplate&amp;gt;&lt;br /&gt;
                Name: &lt;br /&gt;
                &amp;lt;asp:TextBox ID="txtName" runat="server" &lt;br /&gt;
                    Text='&amp;lt;%# Eval("FirstName") + " " + Eval("LastName") %&amp;gt;' /&amp;gt;&lt;br /&gt;
            &amp;lt;/ItemTemplate&amp;gt;&lt;br /&gt;
        &amp;lt;/asp:FormView&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;/p&gt;
&lt;p&gt;这个小技巧也可以用在服务器端的 使用FindControl()函数时：&lt;/p&gt;
&lt;p class="code"&gt;TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;&lt;br /&gt;
if (tb != null)&lt;br /&gt;
{&lt;br /&gt;
    //Access TextBox control&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5、强类型访问跨页提交的控件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个比其他的要内容多一点，但是很有用。ASP.NET 2.0引入了交叉回发的概念使得一个页面可以将信息回发到另一个不同的页面，可以将button控件的PostBackUrl属性设置为接受回发数据的页面来完成。一般的，回发的数据可以象前一页那样做一些事情。但是，如果你要获得前一页制定控件的属性就需要一个cast()，如果你给引起回发的code-behide页面添加了一个公共属性，你就可以直接以强类型的方式添加PreviousPageType来指向引起回发的页面从而能够访问那个属性。&lt;/p&gt;
&lt;p&gt;如果有一个页面Default.aspx，他有一个公共属性来返回此页面上一个TextBox，数据回发目的页(SearchResults.aspx)可以以强类型的方式(不需要FindControl() 方法)，在页面的顶部添加：&lt;/p&gt;
&lt;p class="code"&gt;&amp;lt;%@ PreviousPageType VirtualPath="Default.aspx" %&amp;gt;&lt;/p&gt;
&lt;p&gt;这样，SearchResults.aspx中代码就可以以强类型的方式访问Default.aspx的TextBox。下面的例子假定Default.aspx定义的属性名为SearchTextBox：&lt;/p&gt;
&lt;p class="code"&gt;TextBox tb = PreviousPage.SearchTextBox; PreviousPageType还有一个TypeName属性，你可以定义一个基本类型，一个或多个页面从此类型继承下来，使得这种技术可以在多页面上使用。&lt;/p&gt;
&lt;p&gt;PreviousPage.IsCrossPagePostBack可以判断是否为垮页提交。&lt;/p&gt;
&lt;p&gt;对于跨页提交的补充：&lt;/p&gt;
&lt;p&gt;在ASP.NET 1.X 版本中，页面都是提交到自己本身，并不能方便的指定需要提交的目的页面。例如FirstPage.aspx中的button只能提交到 FirstPage.aspx，而不能提交到SecondPage.aspx。很多时候，ASP.NET 1.X这样工作方式使我们的开发方式受到不少限制。熟悉ASP/JSP/PHP的朋友大概很不习惯，因为以前经常使用的提交方式突然无法使用，虽然也有解决这个问题的方法（欲详细了解的读者可去微软网站收看webcast），可是过程太烦琐，不甚方便。令我们高兴的是，ASP.NET 2.0中有了跨页面提交的简单方法。可在第一个页面中的button添加PostBackUrl属性设置为接受提交的页面，并且这个页面增加PreviousPageType 指令，若要是目标页面在新窗口中打开则可以在源页面＜form＞标记增加target=’_blank’属性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6、强类型访问母版页的控件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PreviousPageType指令并不是唯一的可以强类型访问控件的方法。如果在母版页中定义了一个公共属性，并且想要以强类型的方式访问它，那么就可以在页面顶部添加MasterType指令(注意：MasterType指令同PreviousPageType一样允许定义一个TypeName)&lt;/p&gt;
&lt;p class="code"&gt;&amp;lt;%@ MasterType VirtualPath="MasterPage.master" %&amp;gt;&lt;/p&gt;
&lt;p&gt;你可以在内容页书写如下的代码来访问目标母版页的属性：&lt;/p&gt;
&lt;p class="code"&gt;this.Master.HeaderText = "Label updated using MasterType directive with VirtualPath attribute.";&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7、Validation groups验证组&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一个页中可能有多个控件和多个按钮。当其中的一个按钮被点击后想要特定的validator被激发而不是页面中的所有validator。在ASP.NET 1.1中除了hack code没有更好的办法。ASP.NET 2.0中给所有的validator控件和按钮(button、linkbutton等等)增加了ValidatorGroup属性，就可以轻松地解决这个问题。如果在页面中有一个TextBox并且紧挨着他有一个RequiredFieldValidator 和Button控件，可以将RequiredFieldValidator和Button的ValidationGroup属性设置成一样的值从而使得点击button时只触发这个RequiredFieldValidator的validor，任何没有定义在ValidationGroup内的其他的validator都会被忽略。看下例：&lt;/p&gt;
&lt;p class="code"&gt;&amp;lt;form id="form1" runat="server"&amp;gt;&lt;br /&gt;
    Search Text: &amp;lt;asp:TextBox ID="txtSearch" runat="server" /&amp;gt; &lt;br /&gt;
                    &amp;lt;asp:RequiredFieldValidator ID="valSearch" runat="Server" &lt;br /&gt;
     ControlToValidate="txtSearch" ValidationGroup="SearchGroup" /&amp;gt; &lt;br /&gt;
                    &amp;lt;asp:Button ID="btnSearch" runat="server" Text="Search"&lt;br /&gt;
         ValidationGroup="SearchGroup" /&amp;gt;  .&lt;br /&gt;
        Other controls with validators and buttons defined here&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;/p&gt;
&lt;img src="http://blog.rongzhiwang.com/baicaps/aggbug/29.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>baicaps</dc:creator>
            <guid>http://blog.rongzhiwang.com/baicaps/archive/2009/07/15/asp.net-2.0.aspx</guid>
            <pubDate>Wed, 15 Jul 2009 09:45:31 GMT</pubDate>
            <wfw:comment>http://blog.rongzhiwang.com/baicaps/comments/29.aspx</wfw:comment>
            <comments>http://blog.rongzhiwang.com/baicaps/archive/2009/07/15/asp.net-2.0.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.rongzhiwang.com/baicaps/comments/commentRss/29.aspx</wfw:commentRss>
            <trackback:ping>http://blog.rongzhiwang.com/baicaps/services/trackbacks/29.aspx</trackback:ping>
        </item>
    </channel>
</rss>
