C#程序设计案例教程 第1章 C#语言入门
学习目标 知识目标 熟悉Visual Studio .NET集成开发环境。 学会编写简单的C#控制台应用程序和Windows应用程序。 掌握控制台应用程序的基本输入和输出方法。
开 场 白 假想两年后学有所成的你满怀信心地迈入Google的应聘现场,面试很顺利,直到最后,Google面 试考官不经意问了一句: “你从哪里得到的Google面试的消息?” “百度!” 这样的回答必然会导致求职失败,其根本原因是“面向对象”没有学好。此时,你面向的对象是Google,而你却使用的是百度的搜索方法。 还好,时光无须倒流。我们这个学期即将学习面向对象的编程,学习一门全新语言——C#。
技能目标 自学内容 在集成环境中建立WinForm项目,熟悉开发环境。 设计贪吃蛇游戏界面,熟悉控件使用。 了解面向对象编程思想。 Windows窗体界面设计。
1.1 .NET框架和C#语言简介 1.1.1 .NET框架简介 1..NET体系结构 如图1.1所示,.NET体系结构的核心是.NET框架(.NET Framework),其在操作系统之上为程序员提供了一个编写各种应用程序的高效的工具和环境。.NET体系结构的顶层是用各种语言编写的应用程序,这些应用程序由公共语言运行库控制执行。
核 心 图1.1 .NET体系结构
2..NET框架的两个实体 .NET框架包括两个主要组件:公共语言运行库和.NET Framework类库。 1)公共语言运行库 公共语言运行库又称公共语言运行时(Common Language Runtime,CLR)或公共语言运行环境,是.NET框架的底层。其基本功能是管理用.NET框架类库开发的应用程序的运行并且提供各种服务。
2).NET Framework类库 .NET Framework类库是一个面向对象的可重用类型集合,该类型集合可以理解成预先编写好的程序代码库,这些代码包括一组丰富的类与接口,程序员可以用这些现成的类和接口来生成.NET应用程序、控件和组件。例如,Windows窗体类是一组综合性的可重用的类型,使用这些类型可以轻松、灵活地创建窗体、菜单、工具栏、按钮和其他屏幕元素,从而大大简化Windows应用程序的开发准度。程序员可以直接使用类库中的具体类,或者从这些类中派生出自己的类。.NET框架类库是程序员必须掌握的工具,熟练使用类库是每个程序员的基本功。
3.Microsoft中间语言和即时编译器 .NET框架上可以集成几十种编程语言,这些编程语言共享.NET框架的庞大资源,还可以创建由不同语言混合编写的应用程序,因此可以说.NET是跨语言的集成开发平台。 如图1.2所示,.NET框架上的各种语言分别有各自不同的编译器,编译器向CLR提供原始信息,各种编程语言的编译器负责完成编译工作的第一步,即把源代码转换为用Microsoft中间语言(Microsoft Intermediate Language,MSIL)表示的中间代码。MSIL是一种非常接近机器语言的语言,但还不能直接在计算机上运行。第二步编译工作就是将中间代码转换为可执行的本地机器指令(本地代码),在CLR中执行,这个工作由CLR中包含的即时编译器(Just In Time,JIT)完成。
图1.2 .NET代码执行流程示例
1.1.2 认识C#语言 C#语言是微软公司专门为.NET平台量身打造的程序设计语言,是一种强大的、面向对象设计方法的程序设计语言,它是为生成运行在.NET框架上的企业级应用程序而设计的。 C#看起来与Java有着惊人的相似,它包括诸如单一继承、接口等特征以及与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java仍然有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET Windows网络框架的主角。 微软对C#的定义如下:C#是一种安全、现代、简单的由C和C++衍生而来的面向对象编程语言。它根植于C和C++语言之上,并可以立即被C和C++的使用者所熟悉。设计C#的目的就是综合Visual Basic的高生产率和C++的行动力,目前,C#已经成为Windows平台上软件开发的绝对主流语言。 作为.NET的核心语言,C#有很多优点,如完全面向对象的设计、强大的类型安全、自动的垃圾回收功能、组件技术、跨平台异常处理、版本处理技术等。大家将在后续的C#学习与使用中深入体会这些优点。
1.2 Visual Studio.NET集成开发环境简介
1.2.2 Visual Studio.NET集成开发环境 图1.4 Visual Studio 2010 IDE窗口
双击设计视图中的窗体或窗体中的任意控件,都会打开代码视图,如图1 双击设计视图中的窗体或窗体中的任意控件,都会打开代码视图,如图1.5所示。代码视图是一个纯文本编辑器,在其中可以进行常见的文本编辑操作,如定位、选定、复制、剪切、粘贴、移动、撤销、恢复等操作。VS.NET的代码编辑器以不同的颜色显示代码中不同含义的内容,如以蓝色显示关键字,以绿色显示注释,以蓝绿色显示类名,以棕红色显示字符串。控制台应用程序只有代码视图。
图1.5 代码视图
图1.6 【解决方案资源管理器】窗口 图1.7 【属性】窗口
图1.8 【输出】窗口
1.3 控制台应用程序 1.3.1 基础知识 1.3.1.1 C#应用程序文件夹结构 1.3 控制台应用程序 1.3.1 基础知识 1.3.1.1 C#应用程序文件夹结构 下面来看看C#应用程序文件夹结构。在VS.NET提供的【解决方案资源管理器】窗口中,可以管理解决方案中包含的各种文件,如图1.10所示。
图1.10 【解决方案资源管理器】窗口
1.解决方案文件夹 新建项目时,VS.NET已经在指定的保存项目文件夹下创建了一个与项目名同名的文件夹Hello,这是解决方案文件夹。解决方案可以包含一个或多个项目,本书的例子基本上都是单项目解决方案。 2.项目文件夹 解决方案文件夹Hello下有一个Hello文件夹,这是项目文件夹。 3.解决方案文件 解决方案文件夹Hello下的Hello.sln文件是解决方案文件,它保存了解决方案包含的所有项目的信息以及解决方案项等内容,打开这个文件可以打开整个解决方案。 4.Program.cs文件 Program.cs文件位于项目文件夹Hello中,是程序源文件,编写的代码就在该文件中,在C#系统中以cs作为源文件的扩展名。 5.Hello.exe Hello.exe文件位于文件夹bin\Debug中,是项目编译运行成功后生成的可执行文件,可以直接执行。
1.3.1.2 C#程序结构 C#程序的组成要素如下。 (1)命名空间:命名空间包含一个或多个类。 (2)类:C#中程序的变量与方法必须包含在类中(即用类来组织变量与方法)。 (3)方法:方法必须包含在某一个类中,作为类的一个成员,每个程序有且仅有一个Main()方法。 (4)语句:语句是C#应用程序中执行操作的命令。C#中的语句必须用分号“;”结束。语句书写方便,可以在一行中书写多条语句,也可以将一条语句书写在多行上。 (5)关键字:关键字也叫保留字,是对C#有特定意义的字符串。关键字在VS.NET环境的代码视图中默认以蓝色显示。例如,代码中的using、namespace、class、static、void、string等均为C#的关键字。 (6)大括号:在C#中,括号“{”和“}”是一种范围标志,表示代码层次的一种方式。大括号可以嵌套,以表示应用程序中的不同层次。例如,在下面1.3.1.3小节中“3.程序注释”的案例中,命名空间“Hello”下的大括号表示该命名空间的代码范围,类“Program”下的大括号表示该类的代码范围,方法“Main”下的大括号表示该方法的代码范围。大括号必须成对出现,程序结构才层次分明。方法包含于类中,类包含于命名空间中。
1.3.1.3 C#程序书写格式 1.缩进 除了大括号外,缩进也是用来表示代码结构层次的一种方法。缩进在程序中虽然不是必需的,但却可以清晰地表示出程序的结构层次,因此在程序设计中应该使用统一的缩进格式书写代码。在一般情况下,命名空间及其对应的大括号顶格书写,类及其对应的大括号向内缩进一个制表位,类中的变量、方法及其对应的大括号向内缩进一个制表位,方法中的语句向内缩进一个制表位。实际上,在VS.NET IDE中系统会自动进行缩进调整。 2.字母大小写 C#是对字母大小写敏感的语言,它把同一字母的大小写当作两个不同的字符对待。例如,大写“A”与小写“a”对C#来说是两个不同的字符。尤其值得注意的是,很多习惯于C++或C语言的人可能会误把Main写成main,此时C#会把main当成是不同于Main的另一个名称。 3.程序注释 编写代码非常重要的一项工作就是为代码写注释,注释是给程序员看的,用于提高程序的可读性,它不会被编译,也不会生成可执行代码。C#中的注释方式有如下3种。 单行注释,以双斜线“//”开始,一直到本行尾部,均为注释内容。 多行注释,以“/*”开始,以“*/”结束,可以注释多行,也可以注释一行代码中间的一部分,比较灵活。 文档注释,以“///”开始,若有多行文档注释,每一行都以“///”开头。
例如: 1 using System; 2 namespace Hello//定义命名空间 3 { 4 ///<summary> 5 ///该程序向控制台输出两行信息 6 ///作者:Deng 7 ///日期:2012-12-4 8 ///</summary> 9 class Program//定义类 10 { 11 static void Main(string[]args)//定义方法 12 { 13 /* 14 此处添加代码 15 */ 16 Console.WriteLine("Hello, world!"); 17 Console.ReadLine(); 18 } 19 } 20 }
1.3.2 案例——第一个控制台应用程序 创建一个控制台应用程序,输出“Hello,world!”,显示效果如图1.12所示。 1.3.2 案例——第一个控制台应用程序 创建一个控制台应用程序,输出“Hello,world!”,显示效果如图1.12所示。 图1.12 第一个控制台程序显示效果
注意:在VS.NET IDE中,运行一个程序后该程序就会被自动保存,如果之后未做任何修改,不需要再保存;如果做过修改而未运行过,则需要保存。
代码及分析 1 using System; 2 namespace Hello 3 { 4 class Program 5 { 5 { 6 static void Main(string[] args) 7 { 8 Console.WriteLine("Hello, world!"); 9 Console.ReadLine(); 10 } 11 } 12 }
麻雀虽小,五脏俱全。上述程序虽短,但它却拥有所有程序的“标配”:从命名空间到类,再到主函数,体现了C#程序最基本的结构。 主函数Main是程序的入口点。第8行语句“Console.WriteLine("Hello, world!");”的功能是向显示屏输出双引号之间的字符串。第9行语句“Console.ReadLine();”的功能是输入一个字符串,在这里是使输出显示暂停,等待用户输入直到按Enter键结束。
1.3.3 注意事项 1.namespace关键字 2.using关键字 3.class关键字 4.Main()方法
1.4 Windows窗体应用程序 1.4.1 基础知识 1.4.1.1 对象、类、属性和方法 1.类和对象 1.4.1 基础知识 1.4.1.1 对象、类、属性和方法 1.类和对象 C#是完全面向对象的程序设计语言,在C#编程中接触到的每一个事物都可以称为对象。例如,开发Windows窗体应用程序时,见到的每个窗体和拖放到窗体上的每个文本框、按钮都是对象。同种类型的对象构成一个类,类是对事物的定义,对象是事物本身。打个比方,类就相当于一个模具,而对象则是由这个模具产生出来的具体产品。一个类可以产生很多对象。
2.属性 每个对象都有自己的特征和行为。对象的静态特征称为对象的属性,如按钮的颜色、大小、位置等。 3.方法 方法是对象的行为特征,是一段可以完成特定功能的代码,如实现窗体显示、隐藏、关闭的方法等。
1.4.1.2 事件和事件驱动 当按一下键盘或单击一下鼠标时,Windows操作系统就会有相应的反应。这种键盘键的按下、鼠标键的单击、释放都可称为事件。事件就是预先定义好的能被对象识别的动作。当用户或系统触发事件时,对象就会响应事件,实现特定的功能。这种通过随时响应用户或系统触发的事件,并做出相应响应的机制就叫做事件驱动机制。响应事件时,执行的代码称为事件处理程序。开发应用程序时,编程人员的主要工作之一就是针对控件可能被触发的事件设计适当的事件处理程序。
1.4.1.3 窗体对象 窗体(Form)就是应用程序设计中的窗口界面,是C#编程中最常见的控件,其他控件对象都必须放置在窗体上。在创建C#的Windows应用程序和Web应用程序时,VS.NET IDE会自动添加一个窗体。
1.4.1.4 控件对象 1.按钮控件 2.文本框控件 1.4.1.5 控件的基本操作 1.控件的添加 2.控件的选择 3.控件的布局
1.4.2 案例——第一个Windows窗体应用程序 如图1.16所示,单击【显示】按钮,可在文本框中显示文字“Hello, world!”;单击【清屏】按钮,可清除文本框中的内容,如图1.17所示。
图1.16 单击【显示】按钮的效果 图1.17 单击【清屏】按钮的效果
代码及分析 private void button1_Click(object sender, EventArgs e) { textBox1.Text="Hello, world!"; }
private void button2_Click(object sender, EventArgs e) { textBox1.Text=""; }
1.5 贪吃蛇项目分解——界面设计 1.5.1 任务描述 本节任务有两个:一是讨论“贪吃蛇”游戏的需求;二是完成“贪吃蛇”游戏的界面设计,如图1.22所示。
图1.22 “贪吃蛇游戏”界面
1.6 本 章 小 结 本章简单介绍了.NET框架与C#语言的特点,说明了Visual Studio 2010集成开发环境的使用方法,并讲述了控制台应用程序和Windows窗体应用程序的开发方法,以及C#程序的基本结构和书写格式。另外,还介绍了控制台的输入/输出方法,并初步认识了类、对象、属性、方法和事件等概念。 此外,本章通过3个案例介绍了3个实训点:一是如何创建、编译和执行简单控制台应用程序;二是如何开发Windows窗体应用程序(包括如何添加控件、如何设置控件属性、如何编写事件处理方法);三是设计“贪吃蛇游戏”界面。希望大家通过这3个案例,初步掌握C#和Visual Studio开发环境。