程序messagebox

messagebox  时间:2021-01-29  阅读:()

绪论本章将简要介绍.
NET技术的由来和发展、.
NETFramework及其核心编程语言C#的基本信息,然后从一个简单的例子开始带领读者走进C#的编程世界.

1.
1Microsoft.
NET技术Internet技术在20世纪60年代末期才开始起步,却成为人类历史上意义最为深刻的变革之一.
随着网络应用需求的飞速增长,以资源共享和协同工作为主要特征的网络分布计算已经成为新一代计算和应用的主流.
随着主机计算向网络分布计算的过渡,软件系统的规模和复杂度呈几何级数增加,传统的软件开发方法面临前所未有的挑战.

为突破时间、地域及平台的限制,提高软件系统的重用和集成能力,组件化软件开发技术应运而生.
它将对象技术和组件技术有机地结合在一起,强调组件的可重用性和互操作性,力图通过组件集成来构建高效的分布式软件系统.
20世纪90年代以来出现了三种典型的组件技术:OMG(对象管理组)的CORBA、Microsoft的COM/DCOM,以及Sun公司的JavaBeans.
它们各有优劣,都面临着不断改进和发展的要求,谁也没有一统天下的实力.

2000年6月,Microsoft正式推出了面向第三代Internet的计算计划——Microsoft.
NET,其目标之一就是希望.
NET能够取代COM,进而成为Windows应用和Web应用的主流开发模型.
这可以说是Microsoft继使用Windows取代DOS操作系统之后又一项战略性的举措.
从技术角度理解,.
NET是一个全新的计算平台,它的主要特点如下:面向异构网络、硬件平台和操作系统,为软件提供最大限度的可扩展性、互操作性及可重用性.
例如,它能够将PC上的软件方便地移植到手机、PDA等终端上.

实现软件系统之间的智能交互和协同工作,提高整个网络的效率和利用率,特别是实现企业级的系统集成和资源优化,给开放型企业的生产力水平带来质的飞跃.
其中的一个关键组件就是以XML和SOAP协议为基础的Web服务.

提供一个标准化的、安全的、一致的模型和环境,简化分布式应用程序的开发难度,从而大幅提高软件系统的质量和生产率.
例如,.
NET支持在不同编程语言开发的组件之间进行无缝的交互和集成.

.
NET在理念中包含了对操作系统和计算机网络设计思想的延伸,即将Internet本身作为构建新一代操作系统的基础.
Microsoft的宏伟目标是让.
NET彻底改变软件的开发方式、发行方式和使用方式,构建第三代Internet平台,解决各种协同合作问题,实现信息的高效沟通和分享,让整个Internet为人们提供最全面的服务.

Microsoft为.
NET技术制定了一套完整的规范,并将它提交到ECMA等标准化组织,以促进.
NET的广泛应用.
这套规范就是公共语言架构(CommonLanguageInfrastructure,CLI),它包括如下组成部分.
通用类型系统(CommonTypeSystem,CTS):定义了一套类型系统的框架,规定了数据类型的声明、使用和管理方法.
.
NET中的任何类型都必须遵守其中的约定.

公共语言规范(CommonLanguageSpecification,CLS):一组语言规则的集合.
如果某种编程语言符合其中的所有规则,它就是标准的.
NET编程语言,可以实现与其他.
NET编程语言的跨语言集成;如果某个组件中的代码使用了其中规定的功能,它就是标准的.
NET组件,可以实现与其他.
NET组件的交互.

通用中间语言(CommonIntermediateLanguage,CIL):一种中性语言,更准确地说是一套处理器无关的指令集合.
可以针对不同的平台将通用中间语言翻译为可执行的机器指令(二进制代码),而任何.
NET编程语言所编写的代码可以被编译成通用中间语言指令集.

其他相关的标准化文档、协议和规范等.
1.
2.
NETFramework公共语言架构是.
NET的技术规范,Microsoft在Windows平台上针对该规范进行了完整的实现,这就是.
NETFramework,它包括.
NET类库和公共语言运行时(CommonLanguageRuntime,CLR)两大部分,其整体环境架构如图1.
1所示.
图1.
1.
NETFramework环境结构其中,.
NET类库定义了大量的可重用对象和组件,开发人员可以利用它们快速开发各种服务和应用.
不论是.
NET预定义的对象和组件,还是开发人员自行创建的对象和组件,它们都运行在CLR这个中间平台上,而底层平台的操作细节由CLR负责实现.

1.
2.
1公共语言运行时从技术上说,公共语言运行时就是一个虚拟机,它为各种.
NET应用提供了一个高性能的、抽象于底层操作系统和硬件的运行时环境.
CLR的主要功能体现在以下三个方面.

1.
管理代码的执行各类.
NET应用程序的代码被编译为通用中间语言.
在程序执行时,CLR将通用中间语言翻译为具体的机器指令,负责加载所需的元数据类型、组件及其他各种资源,并在执行过程中提供安全性管理、错误处理、垃圾回收、版本控制等服务.

由于CLR对程序执行细节进行了封装,开发人员就可以专注于程序的业务和功能流程.
此外,CLR提供了一致的实现模型,各类组件和程序能够以统一的方式进行交互.
因此,CLR是在.
NETFramework上实现程序高度的互操作性、集成性以及可重用性的关键所在.
为了充分利用CLR所提供的强大功能,Microsoft推荐使用托管代码(ManagedCode)来开发各种.
NET应用.
托管代码是指满足公共语言规范要求、所使用元数据类型均属于通用类型系统、编译器面向CLR的程序代码.
使用托管代码开发的对象,其整个生命周期都在CLR的管理范围当中,因而能够享受跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析等多种服务.

然而,.
NET也允许开发人员使用非托管代码来绕过CLR的某些服务,或自行实现CLR的某些功能.
托管代码和非托管代码之间可以相互调用.

2.
提供通用类型系统CLR定义了一套完整的、符合通用类型系统约定的元数据类型集合,这为组件的资源控制、版本管理,以及组件之间的交互提供了关键性的信息.

CLR利用通用类型系统对代码进行严格的验证,以保证组件和程序的可靠性.
开发人员所定义的各种新类型都从CLR的元数据类型中派生,这些新类型在使用时能够完全满足通用类型系统的约定.
现有的及新增的.
NET语言都以CLR为基础,这样使用不同编程语言的开发人员就能够方便地协同工作,共同构建应用程序.
例如,在C#语言编写的程序中,可以继承使用VB.
NET语言编写的类,调用它的对象和方法.
3.
提供系统服务CLR屏蔽了底层操作系统和硬件的特性,应用程序是在该虚拟机上而不是在操作系统上直接运行.
在需要进行资源管理、内存分配、系统API访问等工作时,由CLR与操作系统打交道,.
NET组件和应用程序则使用CLR提供的统一接口,这不仅简化了开发难度,也大大方便了程序的跨平台移植.

1.
2.
2.
NET类库.
NET类库是一个完全面向对象的类型集合,它们提供了丰富的功能以支持Windows和Web等各种应用开发.
其主要内容包括:基础类型,如各种基本数值类型、字符串类型和对象类型.
数据结构封装,如集合、链表、队列、堆栈等数据类型.
Windows界面要素,如按钮、菜单、工具栏、文本框、列表框等各种Windows窗体控件.

Web界面要素,包含各种Web窗体控件,以及验证控件、视图和缓存等Web客户端所特有的要素.

WebService,用于对Web服务的定义、描述、配置和解析等.
XML文档处理,如XML文件、属性、元素、节点、读写器、解析器等.
文件输入输出,如驱动器、目录、文件、流、读写器等.
数据访问,如数据连接、适配器、数据集、表格、记录、主键、关联等.

类型反射,用于获取程序集、对象、方法、属性、字段等目标的元数据信息.

异常处理,用于处理系统和应用程序所引发的各种异常.
1.
3C#语言简介20世纪80年代以来,C/C++一直是使用最为广泛的商业化开发语言.
它们提供了许多复杂的底层控制能力,但代价是相对较长的学习周期和较低的开发效率,同时也给程序的安全性带来了潜在的威胁.
C++语言过度的功能扩张也破坏了面向对象的设计理念.
软件行业迫切地需要一种全新的现代程序设计语言,它能够在控制能力与生产效率之间达到良好的平衡,特别是将高端应用开发与对底层平台访问紧密结合在一起,并与Web标准保持同步,C#(读作"C-Sharp")语言就是这一使命的承担者.

C#语言从C/C++发展而来,它汲取了包括C++、Java、Delphi在内的多种语言的精华,是一种简单易学、类型安全和完全面向对象的高级程序设计语言.
它的设计目标就是在继承C/C++强大功能的同时,兼有RAD(快速应用程序开发)语言的高效性.
作为.
NET的核心编程语言,C#充分享受了CLR所提供的优势,能够与其他应用程序方便地集成和交互.
下面对它的几个突出特点进行描述:语法简洁.
C#取消了指针,也不定义烦琐的伪关键字.
它使用有限的指令、修饰符和操作符,语法上几乎不存在任何冗余,整个语言结构十分清晰.
初学者通常能快速掌握C#的基本特性,而C/C++程序员转入C#则几乎不会有任何障碍.

完全面向对象.
C#具有面向对象的语言所应有的基本特性:封装、继承和多态性.
它禁止全局变量和全局方法,而是以类为基础来构建所有的类型,并通过命名空间对代码进行层次化的组织和管理.
许多精巧的对象设计模式都在C#语言中得到了有效的应用.

与Web紧密结合.
借助Web服务框架,C#使得网络开发和本地开发几乎一样简单.
开发人员无须了解网络的细节,可以用统一的方式来处理本地的和远程的C#对象,而C#组件能够方便地转变为Web服务,并被其他平台上的各种编程语言调用.

目标软件的安全性.
C#符合通用类型系统的类型安全性要求,并用CLR所提供的代码访问安全特性,从而能够在程序中方便地配置安全等级和用户权限.
此外,垃圾收集机制自动管理对象的生命周期,开发人员无须再负担内存管理的任务,应用程序的可靠性进一步得到了提高.

版本管理技术.
C#在语言中内置了版本控制功能,并通过接口和继承来实现应用的可扩展性.
应用程序的维护和升级更加易于管理.

灵活性与兼容性.
C#中允许使用非托管代码来与其他程序(包括COM组件、WIN32API等)进行集成和交互.
它还可以通过委托(delegate)来模拟指针的功能,通过接口来模拟多继承的实现.

随着.
NET技术的成功与普及,C#语言自然成为了.
NET平台上最受欢迎的开发语言,其本身也在不断地改进和完善.
随着.
NETFramework的几次重大升级,C#语言目前也已发展到了4.
0版本,表1.
1列出了其版本升级过程中的主要新增功能.

表1.
1C#语言升级版本中的主要新增功能版本新增功能特性2.
0泛型(GenericType)、可空类型(NullableType)、遍历器(Iterator)、匿名方法(AnonymousMethod)、分布类型(PartialType)3.
0Lambda表达式、隐式类型(ImplicitType)、匿名类型(AnonymousType)、扩展方法(ExtensionMethod)、自动属性(AutomaticallyImplementedProperty)4.
0可选参数(OptionalParameters)和命名参数(NamedParameters)、元组(Tuple)、动态绑定(DynamicBinding)、协变(Co-Variance)与逆变(Contra-Variance)Microsoft推出的集成开发环境VisualStudio.
NET支持对C#等各种.
NET语言的可视化编程,使开发人员能够方便地创建、调试和发布程序,从而快速构建各类.
NET应用.
目前该环境的最新版本为VisualStudio2010.
1.
4第一个C#应用程序下面先看一个最简单的C#应用程序,其作用是向用户输出一行文本.
//程序清单P1_1.
csusingSystem;namespaceP1_1{classProgram{staticvoidMain(){Console.
WriteLine("Welcometo.
NET");}}}创建和编译C#程序有两种基本方式.
一是使用Windows记事本等文本编辑器输入如上代码,并以文件名"P1_1.
cs"进行保存(扩展名cs表示C#源文件);而后再打开Windows控制台窗口,定位到指定的.
NETFramework所在目录,其中的csc.
exe文件就是C#编译器,使用它就可以将源文件编译为一个可执行程序,运行程序可看到其输出"Welcometo.
NET",如图1.
2所示.
图1.
2程序P1_1的运行结果提示:C#编译器csc.
exe位于系统WINDOWS目录下的"\Microsoft.
NET\Framework\v*.
*"子目录中,其中"v*.
*"表示.
NETFramework的版本号,不同版本的Framework对应不同版本的编译器.
如果将.
NETFramework所在目录加入到系统环境变量Path中,那么在源程序文件所在目录下就可以直接执行编译命令,而不需要再指定路径.

第二种方式是使用VisualStudio.
NET集成开发环境.
以VisualStudio2010为例,启动开发环境,选择"文件"→"新建"→"项目"命令,可打开图1.
3所示的对话框,在模板中选择"VisualC#"下的"控制台应用程序"项,必要时指定项目名称和位置,单击"确定"按钮就创建了一个C#程序项目.

图1.
3使用VisualStudio创建控制台应用程序这样,VisualStudio会自动生成控制台应用程序的代码框架,只要在Main方法中输入一行代码"Console.
WriteLine("Welcometo.
NET");",按Ctrl+F5组合键就可生成并执行程序,在自动打开的控制台窗口中同样可以看到程序的输出.

1.
5C#程序的基本结构接下来以程序P1_1为例,对C#程序的基本结构进行简要分析.
1.
5.
1类型和方法程序P1_1中用于输出文本的代码只有一行(以分号结束):Console.
WriteLine("Welcometo.
NET");其中Console表示控制台对象,这是.
NET类型中的一个预定义类型,其WriteLine方法用于在控制台输出一行文本.
程序的各种操作都是通过方法(Method)来实现的,而在面向对象的语言中,任何方法都必须属于一个类型,WriteLine就是Console类型的一个方法,因此在C#中也叫做成员方法.

在程序P1_1中还自己定义了一个Main方法,上述代码就放在Main方法定义的一对大括号中,这表示Main方法调用了Console类型的WriteLine方法:staticvoidMain(){Console.
WriteLine("Welcometo.
NET");}在C#程序中,Main方法定义了程序的入口点,因此也叫程序的主方法.
每个C#可执行程序都要从一个Main方法开始执行,而后通过调用其他各种方法来完成所需的程序功能.
Main方法之前的static修饰符表示方法是静态的,void关键字则表示方法没有返回值.

该程序的Main方法又被包含在类Program定义的一对大括号中.
在C#中,类是一种最基本的类型,它使用class关键字定义,其中可以包含数据成员(也叫字段)和函数成员,方法则是最基本的一种函数成员.

1.
5.
2命名空间在程序P1_1中,类Program的定义又被包含在namespaceP1_1之后的一对大括号中,其中namespace用于定义命名空间.
在C#中,命名空间、类及类方法中的代码都需要包含在一对大括号"{"和"}"之中,且括号必须成对使用.
命名空间是C#代码的基本组织形式:成员必须属于类型,类型又必须属于命名空间,一个命名空间还可以再嵌套在另一个命名空间之中,这使得各种代码元素的组织结构在逻辑上非常清晰.
元素之间的从属关系在C#代码中以圆点来表示,如上面Main方法的全名就是P1_1.
Program.
Main.

命名空间的一个重要作用是解决命名冲突的问题.
例如两名程序员都在自己的程序中定义了一个叫做Student的类,但类的功能并不相同,那么程序相互调用时就会产生混淆.
而通过把这两个类放到不同的命名空间中,如一个属于命名空间Graduate,另一个属于命名空间Undergraduate,那么Graduate.
Student和Undergraduate.
Student就是两个不同的类,命名冲突的问题就迎刃而解了.

再看程序P1_1中命名空间定义前的一行代码:usingSystem;它表示引用了.
NET类库中一个名为System的命名空间,这主要是为了使用该空间下定义的Console类.
如果去掉上面这行代码,那么程序中用于输出文本的语言就要改写为:System.
Console.
WriteLine("Welcometo.
NET");也就是说,如果没有引用命名空间,那么在代码中访问其他命名空间中的元素时就应当使用全名;而如果通过关键字using引用了某个命名空间,那么访问其中的类型时就可以省略其所属的命名空间名.
不过,如果在程序P1_1中又定义了一个自己的Console类,那么使用时仍需要使用全名来说明类型属于哪一个命名空间.

using关键字还可以为引用的命名空间指定简称,例如:usingsys=System;那么在代码中就可以使用sys来指代System命名空间:sys.
Console.
WriteLine("Welcometo.
NET");1.
5.
3程序注释程序P1_1的首行以两个反斜杠"//"开头,这表示程序的注释,那么该行注释会被编译器忽略://程序清单P1_1.
cs双反斜杠的作用范围直至该行结束,这叫做单行注释.
另外还有一种注释方式叫做多行注释,它以"/*"为开始标记,"*/"为结束标记,其中的内容不论多少行都会被编译器忽略,例如:/*第一个C#程序本程序用于在控制台上输出一行字符*/Console.
WriteLine("Welcometo.
NET");但多行注释的标记间不能相互嵌套.
例如在下面的语句中,编译器会将第一个"/*"标记和第一个"*/"标记之间的内容视为注释,那么第二个"/*"标记就会被忽略,而最后一行的"*/"则会被视为不合法的代码,例如:/*第一个C#程序/*本程序用于在控制台上输出一行字符*/*/良好的注释是程序设计中的重要一环,它主要用于对代码的用途、流程等内容进行描述,从而使程序更加清晰易读;有时也可被用来忽略无用的代码.
优秀程序员都应当养成注释代码的良好习惯.

1.
5.
4程序集前面介绍的都是程序源代码的逻辑组织方式,而源代码需要被编译为物理程序之后才能运行.
应用程序的基本组织单元叫做程序集,如P1_1.
exe就是我们自己编译生成的一个程序集.

除了exe可执行文件外,dll动态链接库也是另一种常见的程序集格式.
如上面引用的System命名空间,它所在的程序集就是System.
dll程序集,这是.
NET类库中最基本的一个程序集,其中定义了各种最为常用的基础类型.

在程序中使用了其他程序集中的内容,那么在编译程序时就要引用这些程序集.
不过作为最基本的.
NET程序集,System.
dll程序集在编译时会被自动引用.
如果要显式地引用某个程序集,那么在csc编译命令中应使用"/reference:"选项(可简写为"/r:")来指定程序集所在的文件路径,例如:csc/reference:System.
Xml.
dllP1_1.
cs提示:如果要引用多个程序集,那么可并列使用多个引用编译选项.
使用VisualStudio.
NET开发环境时,像System、System.
Data、System.
Xml等一些基本的程序集在创建程序项目时会自动添加,并在编译时自动被引用.
如果要添加新的程序集引用,那么可选择"项目"→"添加引用"命令,打开图1.
4所示的"添加引用"对话框,在其中选择指定的程序集名称,然后单击"确定"按钮即可.

图1.
4在VisualStudio中添加程序集引用下面创建一个新的程序P1_2,在其中定义一个新类Class1及其成员方法GetName://程序清单P1_2.
csusingSystem;namespaceP1_2{publicclassClass1{publicstaticstringGetName(){returnSystem.
Windows.
Forms.
SystemInformation.
UserName;}}}在C#语言中,return关键字用于返回值,方法代码执行到这里就会结束.
只要方法的返回类型不为空(void),那么其执行代码中就必须使用return语句来返回值.
上面程序中的GetName方法返回一个字符串(返回类型为string),其内容为当前用户名,这是通过.
NET类库中的SystemInformation类型获取的,该类型属于System.
Windows.
Forms.
dll程序集,因此在编译时需要引用该程序集.
此外,程序P1_2不包含Main方法,不能作为可执行程序运行,因此应使用"/target:"编译选项(可简写为"/t:")来指定将其编译为动态链接库(library):csc/r:System.
Windows.
Forms.
dll/t:libraryP1_2.
cs如果是使用VisualStudio.
NET开发环境,那么可在图1.
2所示的"新建项目"对话框中选择"类库"模板,并通过图1.
3所示的"添加引用"对话框添加对System.
Windows.
Forms程序集的引用.
编写完代码后,按下F6键可编译生成动态链接库程序.

接下来再回到程序P1_1,在其Main方法中增加一行代码,以调用程序P1_2中的GetName方法:classProgram{staticvoidMain(){Console.
WriteLine(P1_2.
Class1.
GetName());Console.
WriteLine("Welcometo.
NET");}}在编译时引用程序P1_2.
dll,再运行程序P1_1的输出结果如图1.
5所示.
图1.
5引用程序P1_2后程序P1_1的输出结果1.
6与用户进行交互前面两个程序只是向用户输出文本,下面则介绍一些与用户进行交互的基本方式.

1.
6.
1给程序传递参数除了直接运行之外,许多可执行程序还可以带有参数.
例如C#编译器csc.
exe就可以有各种编译选项;再如Windows记事本程序,其文件名为notepad.
exe,直接运行它将打开一个空白文档,而加上一个字符串参数就可以打开指定的文件名:notepadc:\BootLog.
txt使用VisualStudio创建控制台应用程序时,在自动生成的代码框架中可看到Main方法带有一个string[]类型的参数args:staticvoidMain(string[]args)这里的string[]类型表示字符串数组,即Main方法可以接受一组字符串作为参数,而程序主方法的参数也就是程序能够接受的参数.
在下面的控制台程序中,args[0]表示用户为程序提供的第一个参数,这样程序就将在输出"你好"之后再输出该参数的内容://程序清单P1_3.
csusingSystem;namespaceP1_3{classProgram{staticvoidMain(string[]args){Console.
Write("你好,");Console.
WriteLine(args[0]);}}}编译该程序后,如果直接执行P1_3.
exe将发生错误.
此时至少需要为程序指定一个参数,如执行"P1_3Mike"将输出"你好,Mike".
类似地,如果用户为程序提供了多个参数,那么args[1]表示第二个参数,args[2]表示第三个参数,依此类推(计数从零开始).
通过args.
Length可判断参数的个数,例如下面的代码对程序P1_3进行了修改,并根据传入参数的个数不同而进行不同的处理:classProgram{staticvoidMain(string[]args){Console.
Write("你好:");if(args.
Length==1)Console.
WriteLine(args[0]);if(args.
Length>1)Console.
WriteLine(args[0]+"和"+args[1]);}}修改后程序P1_3的输出结果如图1.
6所示.
图1.
6程序P1_3的输出结果1.
6.
2控制台交互前面介绍了Console类表示控制台窗口,控制台程序的输入输出都要依靠它来完成,表1.
2列出了它的常用输入输出方法.

表1.
2Console类的常用输出输入方法名称接受参数重载返回值类型用途Read无无int从输入流读入下一个字符,至换行符结束ReadKey无无ConsoleKeyInfo从输入流读入一个字符ReadLine无无string从输入流读入一行文本,至换行符结束Writestring有void输出一行文本WriteLinestring有void输出一行文本,并在结尾处自动换行其中Write和WriteLine两个方法有多种重载形式,它们都可以接受多种类型的参数(包括字符串、字符、整数和浮点数等),例如:Console.
Write(123);//输出整数Console.
WriteLine(123);//输出整数并换行Console.
WriteLine(15.
25);//输出浮点数并换行这两个方法还可以对输入的参数进行格式化输出,例如:Console.
WriteLine("Hello,{0}","Mike");Console.
Write("Project{0},Language{1},Ver{2}","Console","C#",4.
0);这种方式是将形如{0},{1},…的指代标记包含在方法的第一个字符串参数中,而使用方法的第二个参数来取代标记{0}、第三个参数来取代标记{1},依此类推,最终将所有指代标记都替换为实际内容.
例如,上面第一行代码调用WriteLine方法时,方法的第一个参数中的{0}标记将被第二个参数值"Mike"所替换,所以输出将是"Hello,Mike";而第二行代码的输出将是"ProjectConsole,LanguageC#,Ver4.
0".
下面的程序演示了如何根据用户的输入作出不同的响应,其中Console.
Read方法用于读取用户的输入,程序的输出结果如图1.
7所示.

//程序清单P1_4.
csusingSystem;namespaceP1_4{classProgram{staticvoidMain(){//显示提示信息Console.
WriteLine("请选择语言:");Console.
WriteLine("1.
英文2.
简体中文3.
繁体中文");//读取并判断用户输入inti=Console.
Read();if(i=='1')Console.
WriteLine("C#ProgrammingLanguageTutorial");elseif(i=='2')Console.
WriteLine("C#语言程序设计基础");elseif(i=='3')Console.
WriteLine("C#語言程式設計基楚");}}}图1.
7程序P1_4的运行结果这段程序本身不难理解,但有两个值得注意的问题:(1)Console的Read方法返回整数类型int,但这个返回值和用户输入的整数并不相同,而是要与整数所对应的字符(即数字加上一对单引号)进行比较.
如果换成"if(i==1)"则这样的代码不会响应用户所按下的数字键.
(2)使用Read方法读取输入并不立即响应,而是要等到用户按下Enter键.
如果要即时做出响应,可以改用Console的ReadKey方法,如程序P1_5所示://程序清单P1_5.
csusingSystem;namespaceP1_5{classProgram{staticvoidMain(){//显示提示信息Console.
WriteLine("请选择要显示的内容:");Console.
WriteLine("1.
英文2.
简体中文3.
繁体中文");//直接读取并判断用户输入ConsoleKeyInfok=Console.
ReadKey();if(k.
KeyChar=='1')Console.
WriteLine("C#ProgammingLanguageTutorial");elseif(k.
KeyChar=='2')Console.
WriteLine("C#语言程序设计基础");elseif(k.
KeyChar=='3')Console.
WriteLine("C#語言程式設計基楚");}}}1.
6.
3Windows窗体应用程序此前所介绍的C#控制台应用程序都是以命令行的方式运行,而编写控制台程序对初学者来说是个不错的选择,因此本书前半部分的示例以控制台程序为主.
不过,实际的应用软件大多需要丰富的图形用户界面(GraphicalUserInterface,GUI).
Windows操作系统本身就是一个图形界面操作系统,每个基于.
NET平台的Windows应用程序至少应包含一个Windows窗体,用户通过窗体提供的可视化操作方式与程序进行交互,如单击鼠标、选择菜单项、编辑文本等.

.
NET类库中为所有的Windows窗体提供了一个基础类型Form,该类属于System.
Windows.
Forms程序集.
开发人员在编写自己的Windows应用程序时,可以直接使用这个类,也可以以Form类为基础创建自己的窗体,这种方式在面向对象的编程概念中叫做继承.

下面的程序用于向用户显示一个Windows窗体://程序清单P1_6.
csusingSystem;usingSystem.
Windows.
Forms;namespaceP1_6{staticclassProgram{staticvoidMain(){Application.
Run(newForm());}}}上述代码也很简单,主方法中使用的Application是System.
Windows.
Forms程序集中的一个类,代表当前的Windows应用程序实例.
代码newForm()创建了一个Form对象,并由Application类的Run方法将其显示为程序的主窗体.
可以使用下面的命令编译该程序:csc/r:system.
dll/r:system.
windows.
forms.
dllP1_6.
cs运行该程序时将首先打开一个控制台窗口,然后才显示一个Windows窗体(如图1.
8所示).
关闭该窗体,程序也就执行完毕.

图1.
8程序P1_6的运行结果这是因为该程序并没有加上Windows应用程序的标记.
要想不显示控制台窗口,那么在编译程序时应通过选项"/t:winexe"来指定生成Windows可执行文件,这时运行程序就能够直接打开Windows窗体:csc/t:winexe/r:system.
dll/r:system.
windows.
forms.
dllP1_6.
cs如果使用VisualStudio集成开发环境,在图1.
3所示的"新建项目"对话框中选择模板为"Windows应用程序",那么创建的项目中将包含两个类:一个是含有Main方法入口点的Program类,另一个是窗体类Form1(从Form继承).
在VisualStudio中打开窗体的设计视图,可使用鼠标从"工具箱"中拖放各种控件到窗体上,还可以在"属性"窗口中设置窗体和控件的外观(如通过Text属性设置控件文字,通过BackColor属性设置背景色,等等),如图1.
9所示.

图1.
9VisualStudio中的Windows窗体设计器这里从"工具箱"中选取一个Button控件拖放到窗体上,双击该控件可切换到窗体的代码视图,在自动生成的窗体成员方法中输入如下代码:privatevoidbutton1_Click(objectsender,EventArgse){MessageBox.
Show("欢迎使用.
NET!
");}之后按Ctrl+F5组合键生成并执行程序,可以看到打开的窗体中包含一个按钮控件.
单击按钮将弹出一个消息框,其中显示的内容为"欢迎使用.
NET!
".
这里MessageBox类表示消息框,其Show方法用于显示指定的消息内容.
有关Windows窗体和控件用法将在后续章节中进行更为详细的阐述.

本章小结.
NET技术分为两大部分:规范(公共语言架构)和实现(.
NETFramework).
C#是.
NET平台上的核心编程语言,功能强大而又简单易学,能够显著提高软件的开发效率.

类是C#语言中最基本的一种数据类型,程序操作主要通过类的方法来实现.
任何可执行程序的入口点都由一个Main方法来定义.
C#使用命名空间来组织各种类型,并使用程序集来组织编译后的物理程序.
System程序集中的Console类表示控制台窗口,而System.
Windows.
Forms程序集中的Form类是所有Windows窗体的基类.

习题11.
选择题(1)以下不属于.
NET编程语言的是.
A.
JavaB.
C#C.
VC.
NETD.
VB.
NET(2)C#语言经编译后得到的是.
A.
汇编指令B.
机器指令C.
本机指令D.
CIL中间语言指令(3)C#程序的执行过程是.
A.
从程序的第一个方法开始,到最后一个方法结束B.
从程序的Main方法开始,到最后一个方法结束C.
从程序的第一个方法开始,到Main方法结束D.
从程序的Main方法开始,到Main方法结束(4)Console标准的输入和输出设备分别是和.
A.
键盘B.
鼠标C.
屏幕D.
打印机2.
问答题(5)请简要说明C#源程序的组成部分.
(6).
NETFramework的SDK中提供了一个反汇编工具ildasm.
exe,利用它可以读取程序集中的元数据信息.
执行"开始"→MicrosoftVisualStudio2010→MicrosoftWindowsSDKTools→"IL反汇编程序"命令启动该工具,使用它查看System程序集中包含了哪些主要类型.

无忧云:洛阳/大连BGP云服务器38.4元/月,雅安物理机服务器315元/月起,香港荃湾CN2限时5折优惠

无忧云怎么样?无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点,目前商家开启了夏日清凉补贴活动,商家的机器还是非常...

Hosteons:洛杉矶/纽约/达拉斯免费升级10Gbps端口,KVM年付21美元起

今年1月的时候Hosteons开始提供1Gbps端口KVM架构VPS,目前商家在LET发布消息,到本月30日之前,用户下单洛杉矶/纽约/达拉斯三个地区机房KVM主机可以从1Gbps免费升级到10Gbps端口,最低年付仅21美元起。Hosteons是一家成立于2018年的国外VPS主机商,主要提供VPS、Hybrid Dedicated Servers及独立服务器租用等,提供IPv4+IPv6,支持...

极光KVM美国美国洛杉矶元/极光kvmCN7月促销,美国CN2 GIA大带宽vps,洛杉矶联通CUVIP,14元/月起

极光KVM怎么样?极光KVM本月主打产品:美西CN2双向,1H1G100M,189/年!在美西CN2资源“一兆难求”的大环境下,CN2+大带宽 是很多用户的福音,也是商家实力的象征。目前,极光KVM在7月份的促销,7月促销,美国CN2 GIA大带宽vps,洛杉矶联通cuvip,14元/月起;香港CN2+BGP仅19元/月起,这次补货,机会,不要错过了。点击进入:极光KVM官方网站地址极光KVM七月...

messagebox为你推荐
百度空间首页请问怎样自己弄百度空间的主页图啊?小说软件哪个好用免费看小说,哪个软件好,要免费的英语词典哪个好什么英语词典好?加速器哪个好英雄联盟有什么加速器好用的?网络机顶盒哪个好什么牌子的网络机顶盒最好清理手机垃圾软件哪个好手机垃圾清理软件哪个好dns服务器未响应dns 服务器未响应 怎么解决dns服务器未响应电脑上不了网了,显示DNS服务器未响应,什么意思dns服务器什么意思DNS服务器是什么意思啊?是指路由器吗?360云盘登录怎样才能登录360云盘!?
台湾服务器租用 国际域名抢注 中国域名网 电信测速器 securitycenter ix主机 缓存服务器 香港新世界电讯 win8.1企业版升级win10 java虚拟主机 nerds cdn加速原理 服务器是干什么的 服务器托管什么意思 web服务器是什么 百度云加速 韩国代理ip 东莞服务器托管 聚惠网 蓝队云 更多