回到Spring.NET&NHibernateofC#.NET技术论坛实战C#.NET编程----Spring.NET&NHibernate从入门到精通您可以从以下网址下载最新版:本文中的源代码下载地址:作者:李绿华(WilliamLee)制作时间:2006-11-30版本号:V0.50版权声明:未经作者本人许可,任何公司、团体、个人都不得以任何方式复制或抄袭本文内容的部分或全部。转载本文请通过以下方式联系作者获得许可。邮件:it1630@163.com目录实战C#.NET编程----Spring.NET&NHibernate从入门到精通第一章VisualC#.NET入门指南一、C#简介二、使用VisualStudio开始C#项目步骤1.开始项目步骤2.Hello,World!步骤3.程序结构步骤4.控制台输入步骤5.使用数组步骤6.文件输入/输出步骤7.创建函数步骤8.使用调试器小结第二章面向对像ORM一、什么是ORM二、为什么需要ORM三、流行的ORM框架简介第三章Spring.NET入门一、Spring.NET概览二、第一个Spring.NET的程序第四章NHibernate入门一、什么是Nhibernate二、Nhibernate概述三、第一个NHibernate程序第五章Spring.NET与NHibernate的整合一、建立新的项目(SpringNHibernateSample)二、添加NHibernate程序三、添加Spring.NET的程序四、添加Spring.NET为NHibernate的容器配置五、编写测试程序代码六、测试并查看结果第六章深入Spring.NET与NHibernate开发第七章项目实战----办公自动化系统第八章结束语第一章VisualC#.NET入门指南一、C#简介VisualC#.NET是VisualStudio系列中的最新成员。这种新语言基于C/C++,但它深化了更容易地使用面向组件编程的发展方向。C/C++程序员应该非常熟悉它的语法。下面的示例应用程序示范了如何构建一个简单的实现QuickSort算法的C#项目。它包括了C#程序的基本组成部分:读/写控制台和文件、创建函数和使用基本数组。这些入门指南并不打算涵盖该编程语言的所有方面。它们只是您探索这种语言的一个起点。我们鼓励您按照本教程的说明执行,因为它包括了QuickSort应用程序的各个不同部分。您还可以获得完整的源代码和项目文件。建议的要求编译此示例应用程序需要VisualStudio.NET2003/2005。关于C/C++的知识是有帮助的但不是必需的。二、使用VisualStudio开始C#项目VisualC#.NET入门指南通过实现一个简单的QuickSort算法,带您领略如何构建VisualC#.NET项目。本节将按以下的步骤让大家一步一步了解VisualC#:步骤1.开始项目步骤2.Hello,World!步骤3.程序结构步骤4.控制台输入步骤5.使用数组步骤6.文件输入/输出步骤7.创建函数步骤8.使用调试器小结你可以下载Quicksort_Visual_CSharp_.NET.exe。里面包含了下面的代码。步骤1.开始项目VisualStudio中的开发工作以解决方案的形式进行组织,每个解决方案包含一个或多个项目。在本教程中,我们创建的解决方案包含一个C#项目。创建一个新项目在VisualStudio.NET环境中,从菜单中选择File|New|Project。在左侧选择VisualC#Projects,然后在右侧选择ConsoleApplication。指定项目的名称,然后输入创建项目的位置。VisualStudio会自动创建项目目录。单击OK,那么现在就正式开始了VisualC#解决方案VisualStudio.NET已经创建了含有一个简单VisualC#项目的解决方案。该项目包含两个文件:assemblyinfo.cs和class1.cs。接下来的几步骤将讨论这些不同的文件以及如何编译该项目。步骤2.Hello,World!很遗憾,但我们仍然无法抵御这种诱惑……我们还是不得不完成一个基于C#的经典Hello,World!应用程序,这个应用程序最初是用C语言编写的。修改源代码在SolutionExplorer中双击文件class1.cs。可以通过View菜单来显示SolutionExplorer。更改预生成的模板(class1.cs),如下面以斜体突出显示的代码所示。usingSystem;namespacequicksort{//////SummarydescriptionforClass1.///classClass1{staticvoidMain(string[]args){////TODO:Addcodetostartapplicationhere//Console.WriteLine(Hello,C#.NETWorld!);}}}注意,当您键入代码时,VisualStudio将为您提示类和函数的名称(因为.NET框架发布了这种类型信息)。编译应用程序既然您已经完成了修改,就可以通过在Build菜单中简单地选择Build来编译VisualC#项目。来自C#编译器的错误和消息会在Output窗口中显示。如果没有错误,则可以通过单击Debug菜单下的StartwithoutDebugging来运行HelloWorld应用程序。程序输出在VisualC#中运行HelloWorld示例应用程序时,输出结果的屏幕截图如下:理解更改System.Console类的WriteLine()函数打印传递给它的字符串,其后紧跟一行新的字符。此函数可以接受许多其他数据类型(包括整型和浮点型)的参数。在程序加载完成后,控制就传递给Main()函数。这就是我们在该过程中插入对WriteLine()调用的原因。步骤3.程序结构既然我们已经构建了一个简单的HelloWorld应用程序,那么就让我们停下来分析一下VisualC#应用程序的基本组成部分。源代码注释字符“//”将行的剩余部分标记为一个注释,这样C#编译器就会忽略它。另外,/*和*/之间的代码也会被当作注释。//Thislineisignoredbythecompiler./*ThisblockoftextisalsoignoredbytheVisualC#compiler.*/Using指令.NET框架为开发人员提供了许多有用的类。例如,Console类处理对控制台窗口的输入和输出。这些类是按照层次树的形式组织的。Console类的完全限定名实际上是System.Console。其他的类包括System.IO.FileStream和System.Collections.Queue。using指令允许您在不使用完全限定名的情况下引用命名空间中的类。以斜体突出显示的代码应用了using指令。usingSystem;classClass1{staticvoidMain(string[]args){System.Console.WriteLine(Hello,C#.NETWorld!);Console.WriteLine(Hello,C#.NETWorld!);}}类声明与C++或VisualBasic不同,VisualC#中的所有函数都必须封装在一个类中。class语句声明一个新的C#类。就HelloWorld应用程序来说,Class1类包含一个函数,即Main()函数。如果用一个namespace块将类的定义括起来,就可以把类组织为诸如MsdnAA.QuickSortApp这样的层次。在本入门指南中,我们并不打算深入地介绍类,但是我们将为您简要概述为什么类是我们的示例应用程序的一部分。Main()函数在应用程序加载到内存之后,Main()函数就会接收控制,因此,应该将应用程序启动代码放在此函数中。传递给程序的命令行参数存储在args字符串数组中。步骤4.控制台输入现在,我们将继续编写QuickSort应用程序。我们需要做的第一件事就是提示用户提供输入和输出文件。修改源代码更改C#源文件(class1.cs),如下面以斜体突出显示的代码所示。其他的差异(如类名)可忽略不计。//ImportnamespacesusingSystem;//DeclarenamespacenamespaceMsdnAA{//DeclareapplicationclassclassQuickSortApp{//ApplicationinitializationstaticvoidMain(string[]szArgs){//DescribeprogramfunctionConsole.WriteLine(QuickSortC#.NETSampleApplication\n);//PromptuserforfilenamesConsole.Write(Source:);stringszSrcFile=Console.ReadLine();Console.Write(Output:);stringszDestFile=Console.ReadLine();}}}从控制台进行读取Console类的ReadLine()方法提示用户输入,并返回输入的字符串。它会自动地为字符串处理内存分配,由于使用了.NET垃圾回收器,您不需要做任何释放内存的工作。程序输出从菜单中选择Debug|StartWithoutDebugging来运行程序。这是到此为止来自QuickSort应用程序的输出的屏幕截图。步骤5.使用数组在对从输入读取的行进行排序之前,程序需要将其存储到一个数组中。我们将简要讨论可实现对象数组的.NET基类的用法。修改源代码更改C#源文件(class1.cs),如下面以斜体突出显示的代码所示。其他的差异(如类名)可忽略不计。//ImportnamespacesusingSystem;usingSystem.Collections;//DeclarenamespacenamespaceMsdnAA{//DeclareapplicationclassclassQuickSortApp{//ApplicationinitializationstaticvoidMain(string[]szArgs){//DescribeprogramfunctionConsole.WriteLine(QuickSortC#.NETSampleApplication\n);//PromptuserforfilenamesConsole.Write(Source:);stringszSrcFile=Console.ReadLine();Console.Write(Output:);stringszDestFile=Console.ReadLine();//TODO:ReadcontentsofsourcefileArrayListszContents=newArrayList();}}}使用ArrayList类我们将导入System.Collections命名空间,这样我们就可以直接引用ArrayList。此类实现大小可动态调整的对象数组。要插入新的元素,可以简单地将对象传递到ArrayList类的Add()方法。新的数组元素将引用原始的对象,而垃圾回收器将处理它的释放。stringszElement=insert-me;ArrayListszArray=newArrayList();szArray.Add(szElement);要检索现有的元素,请将所需元素的索引传递给Item()方法。另外,作为一种简写形式,还可以使用方括号operator[],它实际上映射到Item()方法。Console.WriteLine(szArray[2]);Console.WriteLine(sz