C#代码编写基础.ppt
教育部普通高等教育十二五国家级规划教材C#程序设计及应用教程第3版(包括简化版:C#程序设计教程第3版)第1章 C#代码编写基础,2,Ch1 C#代码编写基础,1.1 C#语言和VS2012开发环境1.2 C#项目的组织1.3 控制台应用程序1.4 Windows窗体应用程序1.5 WPF和Silverlight应用程序1.6 独立应用程序和浏览器运行的应用程序,1.1 C#语言和VS2012开发环境,1.1.1 C#语言和.NET框架1.1.2 VS2012开发环境,4,1.1.1 C#语言和.NET框架,C#(读作“C sharp”)是一种完全面向对象的基于.NET框架的高级程序设计语言。专门为快速编写在.NET框架上运行的各种应用程序而设计。语法简洁精心的面向对象设计与Web的紧密结合可靠的安全性与错误处理可靠的版本控制技术灵活性和兼容性。,1.1.1 C#语言和.NET框架,Microsoft.NET框架定义Microsoft.NET框架是生成、运行.NET应用程序和Web Service的组件库。包含公共语言运行库类库类库为开发和运行.NET应用程序提供了各种支持类库是与公共语言运行库紧密集成的可重用的类的集合。,1.1.1 C#语言和.NET框架,Microsoft.NET框架特点:一种框架多种语言支持C#语言、VB.NET语言、C+和C+.NET语言、F#语言等高级语言注意用基于.NET框架开发的应用程序,不论使用的是哪种高级语言,均必须在安装了.NET框架的计算机上才能运行。这种架构与Java应用程序必须由Java虚拟机支持相似。思考如何实现一种框架多种语言?,1.1.1 C#语言和.NET框架,Microsoft.NET框架-公共语言运行库公共语言运行库是.NET框架的基础,为多种编程语言提供统一的运行环境。托管代码以运行库为目标的代码称为托管代码,例如C#。非托管代码不以运行库为目标的代码称为非托管代码,例如C+。,1.1.1 C#语言和.NET框架,Microsoft.NET框架-公共语言运行库中间语言IL使用.NET框架提供的编译器可直接将源程序编译为.EXE或者.DLL文件,此时编译出来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL代码。使用中间语言代码的优点可以实现平台无关性,即与特定的CPU无关;只要能将某种语言编译为IL代码,就可以实现这些语言之间的交互操作。,1.1.1 C#语言和.NET框架,即时编译执行时CLR会将需要的IL代码装入内存,通过JIT编译器(Just-In-Time)将其编译成所用平台的CPU可直接执行的机器代码。即时编译并不是一次把整个应用程序全部编译完,而是只编译它调用的那部分代码所在的模块。为什么要采用即时编译JIT编译器可以有效地提高系统的性能。可利用现有CPU和GPU硬件提供的功能即时生成优化后的可执行代码。,1.1.2 VS2012开发环境,VS2012开发环境1安装VS2012速成版(Express Edition)-免费专业版(Professional Edition)旗舰版(Ultimate Edition)-本书调试用的环境2安装VS2012 SP33配置VS2012开发环境的界面风格(可选)深色浅色,1.1.2 VS2012开发环境,1.2 C#项目的组织,1.2.1 命名空间1.2.2 using关键字1.2.3 Main方法1.2.4 代码注释1.2.5 通过断点调试C#程序1.2.6 C#代码编写命名规范,1.2 C#项目的组织,C#源文件的扩展名为.cs,如Welcome.cs。一个C#源文件中一般只包含一个类【建议这样做】,但也可以包含多个类,文件名和类名可以相同【建议相同】,也可以不同【包含多个类时一般不和类名相同】。调试环境下:项目编译后生成的文件默认保存在项目的binDebug文件夹下。发布时应该改为binRelease。,1.2.1 命名空间,命名空间是对类的一种划分,类似于目录和文件的划分形式。命令空间是一种逻辑划分,而非物理上的存储分类。,1.2.1 命名空间,静态方法调用命名空间.命名空间.命名空间.类名.静态方法名(参数,);例如:(”Hello World!”);实例方法调用实例化:命名空间命名空间.类名=new 类名称(参数,)方法调用:实例名.方法名(参数)例如:System.Text.StringBuilder b=new StringBuilder();b.Append(“abcd”);,1.2.2 using关键字,using关键字指定引用的命名空间,例如:using System.Windows.Forms;简化命名空间的层次表达形式,例如:using WinForm=System.Windows.Form;作为语句,定义一个范围。程序执行到“”时,就会自动释放font1对象例如:Font font1=new Font(Arial,10.0f);using(font1),1.2.3 Main方法,Main方法要求应用程序入口方法名规定为Main。必须声明为public static返回值只能是void或者int。可以放在任何一个类中。,1.2.4 代码注释,常规注释方式单行注释:以“/”符号开始,任何位于“/”符号后的本行文字都视为注释块注释:以“/*”开始,“*/”结束。任何介于这对符号之间的文字块都视为注释。XML注释方式“/”符号是一种XML注释方式在用户自定义的类型如类、接口、枚举等或者在其成员上方,或者命名空间的声明上方连续键入3个斜杠字符可以在键入方法名和参数的过程中看到用XML注释的智能提示。,1.2.4 代码注释,#region注释方式#region预处理指令用于给程序段添加逻辑功能注释,让某一部分代码实现的逻辑功能看起来更清晰。被包围的代码还可以折叠和展开。举例:#region 程序入口static void Main(string args).#endregion,1.2.5 通过断点调试C#程序,断点调试是编程人员必备素质!利用断点查找程序的逻辑错误,是常用的手段之一1设置和取消断点单击某代码行左边的灰色区域。单击设置,再次单击取消设置。鼠标右击某代码行,选择【断点】【插入断点】或者【删除断点】。单击某代码行,直接按键进行设置或取消设置。2利用断点调试程序按执行到断+键终止调试。逐过程 逐语句,1.2.6 C#代码编写命名规范,类名、方法名和属性名全部使用Pascal命名法,即所有单词连写,每个单词的第一个字母大写,其他字母小写。例如HelloWorld、GetData等。变量名、一般对象名、控件对象名以及方法的参数名全部使用Camel命名法,即所有单词连写,但是第一个单词全部小写,其他每个单词的第一个字母大写。例如:userName、userAge等。如果是私有字段,为了和具有相同名字的属性名区分,私有的字段名也可以用下划线(“_”)开头,例如属性名为Age,私有字段名可以为age或者_Age。,1.3 控制台应用程序,1.3.1 控制台应用程序的输入与输出1.3.2 在控制台应用程序中输出格式化数据,1.3.1 控制台应用程序的输入与输出,控制台输出Console.Write();把各种类型的数据或对象转换成字符串写入标准输出流Console.WriteLine();与Write的区别:自动输出回车、换行符(“rn”);例如int age=18;string s=abc;Console.Write(age);Console.Write(s);Console.WriteLine(age);Console.WriteLine(s);,1.3.1 控制台应用程序的输入与输出,控制台输入Console.ReadKey();标准输入流读取用户按下的字符或功能键。例如:ConsoleKeyInfo c=Console.ReadKey();Console.ReadLine();从标准输入流读取一行字符。例如:string s=Console.ReadLine();,1.3.1 控制台应用程序的输入与输出,快速键入C#代码方法1:连续按两次键方法2:在要插入代码段的位置处,用鼠标右击选择“外侧代码”的办法插入代码段。例如:键入“for”三个字母后,连续按两次键,观察系统自动插入的代码段。,1.3.2 在控制台应用程序中输出格式化数据,在Console.Write和Console.WriteLine方法中,可直接定义数据转换为字符串后的输出格式Console.WriteLine(格式化表示,参数序列);Console.Write(格式化表示,参数序列);例如:int x=10,y=20,z=30;/输出10+20+30=60Console.WriteLine(0+1+2=3,x,y,z,x+y+z);/输出60=20+30+10Console.WriteLine(3=1+2+0,x,y,z,x+y+z);,1.3.2 在控制台应用程序中输出格式化数据,格式化输出形式N 从零开始的整数,表示第几个参数。M 可选参数,整数,表示最小长度。若参数N的长度小于M,就用空格填充;如果M为负,则左对齐;如果M为正,则右对齐;格式码可选参数,格式化代码样式。格式码:有默认位数,可用整数指定位数;C货币形式、D十进制形式、F固定精度形式、E指数形式、N用逗号分隔千位数字、P百分比形式、X十六进制形式占位符:0强制占位符、#有效占位符,1.3.2 在控制台应用程序中输出格式化数据,利用string.Format方法格式化字符串先用String.Format方法拼接字符串,再用WriteLine方法输出;既可以在控制台应用程序中使用,也可以在其他应用程序中(WinForm、WPF等)使用。例如:int i=123;/d6表示不够6位左边补零string s=string.Format(0:d6,i);Console.WriteLine(s);,1.3.2 在控制台应用程序中输出格式化数据,3利用ToString方法格式化字符串如果是一个变量,使用ToString方法更简单。Console、WinForm、WPF、Silverlight、ASP.NET等应用程序都可以利用string.Format方法或者ToString方法定义数据的格式。例如:int n1=12;string s1=n1.ToString(X4);/X格式表示用十六进制输出。结果为:000Cstring s2=n1.ToString(d5);/结果:00012,4控制台应用程序示例,【例1-1】演示控制台应用程序的基本设计方法,以及如何在一个解决方案中包含多个应用程序项目。,1.4 Windows窗体应用程序,1.4.1 Windows窗体应用程序的特点1.4.2 Windows窗体应用程序的启动和退出1.4.3 窗体的创建、显示、隐藏和关闭1.4.4 消息框(MessageBox)1.4.5 利用WinForm控件实现输入和输出1.4.6 错误提示(ErrorProvider),1.4.1 Windows窗体应用程序的特点,Windows窗体应用程序是在Windows XP操作系统上开发客户端应用程序的主要开发模型,这种开发模型利用GDI+和操作系统交互。Windows窗体应用程序现状WinForm已有多年的历史,其技术高度成熟,如果开发不包含动画、多媒体(音频视频)以及三维图形等高级功能的程序,使用WinForm应用程序可获得比较高的开发效率和运行性能。,1.4.1 Windows窗体应用程序的特点,GDI(Graphics Device Interface,图形设备接口)是Windows 2000操作系统内核提供的功能,提供二维图形和文本处理功能以及功能有限的图像处理功能没有三维图形和音频视频等多媒体处理功能。随着Windows 2000操作系统退出历史舞台,使用GDI技术的开发人员也越来越少。GDI+是Windows XP操作系统内核提供的功能,在GDI的基础上增加了一套基于.NET框架的编程接口,从而让我们能使用C#快速实现窗体界面绘制和绘图功能。GDI+没有GPU硬件加速功能,所有图形图像处理功能全部都是靠软件来实现。,1.4.2 Windows窗体应用程序的启动和退出,窗体应用程序的启动和停止使用Application类提供的静态方法来启动、停止应用程序Run方法:用于在当前线程上启动应用程序消息循环,并显示窗体。Exit方法:用于停止消息循环。观察Program.cs中的Main方法。,1.4.3 窗体的创建、显示、隐藏和关闭,如何在代码中打开一个新窗体Form2 fm=new Form2();fm.Show();或者Form2 fm=new Form2();fm.ShowDialog();观察Show 与ShowDialog之间的区别如何在代码中隐藏一个窗体“无模式”窗口:调用Hide方法隐藏。this.Hide();隐藏其他窗体可以调用实例名的Hide方法,例如:myForm.Hide();窗体隐藏后,其实例仍在,可重新调用Show方法再次显示,1.4.3 窗体的创建、显示、隐藏和关闭,如何在代码中关闭一个窗体用法1:fm.Close();关闭其他窗体用法2:this.Close();关闭当前打开的窗体用法3:Application.Exit();不论当前窗体是哪个窗体,只要调用Application的Exit方法,整个应用程序就会立即退出,1.4.3 窗体的创建、显示、隐藏和关闭,4注册事件事件是响应用户操作的一种技术。双击窗体设计界面上的某控件,默认会自动注册最常用的事件(例如按钮的最常用事件是Click)。选择某个控件,单击【属性】窗口中的“雷电”符号,可看到该控件对应的各种事件,双击指定的事件,可注册对应的事件。在代码中通过“+=”注册指定的事件,通过“-=”注销指定的事件。当熟悉代码后,这种办法是最灵活也是方便的办法。,1.4.3 窗体的创建、显示、隐藏和关闭,【例1-2】演示Windows窗体应用程序的基本用法。,1.4.4 消息框(MessageBox),消息框显示消息对话框可通过检查Show方法返回的值来确定用户单击了哪个按钮注意虽然用Show方法显示消息框,但由于它本身是模式窗口,所以在消息框关闭前,不会执行它后面的代码。,1.4.4 消息框(MessageBox),MessageBox的Show方法提供了多种重载形式,常用有:public static DialogResult Show(string text)public static DialogResult Show(string text,string caption,MessageBoxButtons buttons,MessageBoxIcon icon)例如:MessageBox.Show(输入的内容不正确);消息框关闭后,返回值是DialogResult枚举值之一。枚举值有:None(消息框未返回值)、OK、Cancel、Yes和No,1.4.4 消息框(MessageBox),Text:在消息框中显示的文本。caption:在消息框的标题栏中显示的文本。buttons:MessageBoxButtons枚举值之一,指定在消息框中显示哪些按钮。枚举值有OK、OKCancel、YesNoCancel和YesNo。icon:MessageBoxIcon枚举值之一,指定在消息框中显示哪个图标。枚举值有None(不显示图标)、Hand(手形)、Question(问号).,1.4.4 消息框(MessageBox),【例1-3】演示消息框的基本用法。,1.4.5 利用WinForm控件实现输入和输出,1分组(Panel、GroupBox)Panel控件和GroupBox控件均用于对控件进行分组不同之处:Panel控件不能显示标题但可以有滚动条,而GroupBox控件可显示标题但不能显示滚动条。2标签(Label)和文本框(TextBox)Label控件用于提供控件或窗体的描述性文字Text属性TextBox控件允许用户在应用程序中输入或编辑文本ReadOnly属性、Name属性、PasswordChar、Text,1.4.5 利用WinForm控件实现输入和输出,【例1-4】演示TextBox控件的基本用法。,1.4.5 利用WinForm控件实现输入和输出,3复选框(CheckBox)和单选按钮(RadioButton)CheckBox选择一个或者多个选项,每个选项一般用选中和非选中两种状态表示。RadioButton一组RadioButton按钮中只能有一个处于选中状态。一旦某一项被选中,同组中其他RadioButton按钮的选中状态将自动清除。,1.4.5 利用WinForm控件实现输入和输出,【例1-5】演示CheckBox控件和RadioButton控件的基本用法。,1.4.5 利用WinForm控件实现输入和输出,列表(ListBox)和下拉列表(ComboBox)ListBox(列表框)控件和ComboBox(下拉框)控件均用于显示一组条目,以便操作者从中选择一条或者多条信息,并对其进行相应的处理两个控件的用法相似。常用属性和方法:SelectedIndex属性:获取或设置当前选择项的索引序号SelectedItem属性:获取或设置当前选择项的值。Count属性:获取项的个数。Items.Add方法:添加项。Items.Clear方法:清除所有项。Items.RemoveAt方法:删除指定的项。,1.4.6 错误提示(ErrorProvider),ErrorProvider组件一般用于提示用户输入的信息有错误,利用该组件可在指定的控件(如文本框)旁显示一个闪烁的错误图标,当用户将鼠标指针放在闪烁的图标上时,会自动显示错误信息。【例1-7】演示ErrorProvider组件的基本用法。,1.5 WPF和Silverlight应用程序,1.5.1 WPF应用程序1.5.2 Silverlight应用程序1.5.3 其他应用程序模板,1.5 WPF和Silverlight应用程序,WPF高效率运行动画、三维图形和音频视频等多媒体功能WinForm应用程序只能靠软件来实现,无法直接利用GPU的硬件加速功能WPF和Silverlight最适用于开发在Windows 7、Windows 8操作系统上运行的应用程序。WPF适用于C/S客户端开发,Silverlight适用于手机和Web富客户端开发。WPF利用操作系统底层支持的DirectX实现硬件加速。,1.5.1 WPF应用程序,1DirectX简介1995年,DirectX 1.0诞生它提供了直接读取图形硬件(显卡)的功能,但该版本还不包括3D功能。当时流行的编程接口是OpenGL,DirectX 1.0刚推出时,由于众多的硬件厂家均不支持DirectX,该版本基本没有获得成功。1996年,微软推出DirectX 2.0。该版本在DirectX中加入了Direct3D,用于访问3D硬件加速的高级图形功能,通过提供通用的COM编程接口使硬件和设计完全分离。,1.5.1 WPF应用程序,1DirectX简介1997年,微软推出DirectX 3.0。此时3D游戏逐渐深入人心不少显卡生产厂家开始支持DirectX,并陆续推出3D图形加速卡。随后微软直接推出DirectX 5.0(没有出现4.0版)5.0版的3D功能日益强大。使游戏中的3D技术逐渐走入成熟阶段。此时DirectX也得到了大多数知名厂商的认可和强力支持。2001年,微软发布了DirectX 8.02002年,微软发布DirectX 9.02006年,微软推出DirectX 10.0版,1.5.1 WPF应用程序,1DirectX简介2009年,微软推出多线程渲染的DirectX 11.0。该版本引入了Shader Model 5.0,以便让GPU从事更多的通用计算工作,而不仅仅是3D运算,从而鼓励开发人员更好地将GPU作为并行处理器来使用。随后,微软将DirectX作为Windows 7、Windows 8操作系统底层默认的核心编程接口。而对DirectX 11.0封装后的WPF和HTML5的实现,则同时支持Windows 7和Windows 8操作系统以及IE 9.0和IE10.0浏览器【IE10.0正式版支持Win7、Win8】,1.5.1 WPF应用程序,2WPF应用程序和WinForm应用程序的区别与联系WPF界面技术是通过操作系统底层支持的DirectX和GPU硬件加速来实现而不是通过GDI+来实现用WPF设计的界面能给用户震撼的视觉体验功能丰富WPF除了具有传统WinForm应用程序的一般功能外,还具有音频、视频、文档、样式、动画以及二维和三维图形等一体化设计功能,1.5.1 WPF应用程序,2WPF应用程序和WinForm应用程序的区别与联系WPF可对窗口进行任意级别的无损缩放WPF提供的图形界面呈现技术和布局控件都是矢量形式的对窗口进行任意级别的缩放,而且画面的质量不会有任何的损耗。GDI+的WinForm应用程序不是矢量形式,所以无论如何优化都无法做到任意级别的缩放。WPF在Win7、Win8操作系统上能获得非常高的性能。在Windows XP操作系统上虽然也能运行WPF应用程序,但由于它没有操作系统的底层支持,运行性能会大打折扣,显得有些力不能及。,1.5.2 Silverlight应用程序,WinForm和WPF主要用于开发桌面客户端应用程序(QQ、飞信、360等都属于这类应用程序)Silverlight是一种插件式的富客户端浏览器应用程序,其功能类似于Flash。Silverlight主要靠客户端浏览器承载运行,但也可独立运行对于桌面计算机来说,Silverlight应用程序不需要在客户端安装.NET框架,因为它是靠安装在客户端的Silverlight插件来运行的。,1.5.2 Silverlight应用程序,WPF和SL的相同点开发API:Silverlight和WPF的语法极其相似全部都是用XAML来编写页面,后台代码用C#语言来编写WPF和SL的不同点内部实现:Silverlight应用程序需要解决跨浏览器、安装Windows Phone操作系统的手机及Xbox 360游戏机等平台的问题,因此它实际上是另一种解决方案和实现技术,1.5.3 其他应用程序模板,其他应用程序模板WCF应用程序ASP.NET Web应用程序ASP.NET MVC应用程序【建议使用ASP.NET MVC 4,利用它可开发手机Web应用程序】Metro样式的应用程序(仅能在Windows 8操作系统上用VS2012开发和运行),1.6独立应用程序和浏览器运行的应用程序,自学,本章习题,1、2、3,