《.net编程先锋C#》第三章 第一个C#应用程序(转)

编程|程序

第三章 第一个C#应用程序
3.0 选择一个编辑器
尽管我是一个顽固的Notepad狂,但这次我不建议用它编辑源码。原因是你正在与真正的编程语言打交道,使用Notepad编辑源码编译时可能产生大量的错误信息行(C++程序员知道我在说什么。)
你有几种选择。可以重新配置你信任的老式Visual C++ 6.0,使它能够和C#源文件一起工作。第二种选择是使用新的Visual Studio 7。第三,你可以用任何第三方程序编辑器,最好要支持行数、色彩编码、工具集成和良好的搜索功能。CodeWright就是其中一个例子,如图3.1所示。

图3.1 CodeWright 是你可以用于创建C#代码文件众多可能编辑器中的一个。

当然,在所提到的编辑器中,没有一个对创建C#程序来说是必要的。用Notepad肯定可以编辑。但是,如果你考虑到要编写更大的项目,最好还是忍痛割爱吧。

3.1 "Hello World" 代码
讨论编辑器有点离题 ,让我们把话题转回到一个非常出名的小应用程序。这个最短的C#版本应用程序见清单3.1。把它存起来,文件名为 helloworld.cs,以便使你能按照说明,完成诸如编译应用程序等其它余下来的步骤。

清单 3.1 最简单的 "Hello World "程序

1: class HelloWorld
2: {
3: public static void Main()
4: {
5: System.Console.WriteLine("Hello World");
6: }
7: }

在C#中,代码块(语句组)由大括弧({和})所括住。所以,甚至你以前没有C++的经验,你也可以说出Main()方法就是HelloWorld 类语句的一部分,因为类被括在所定义的大括弧中。
C#应用程序(可执行)的入口点就是 static Main 方法,它必须包含在一个类中。仅有一个类能使用该标志定义,除非你告诉编译器它应使用哪一个 Main 方法(否侧,会产生一个编译错误)。
和C++相比,Main的第一个字母是大写的M,而不是你曾经使用过的小写字母。在这个方法中,你的程序开始并结束。方法中可以调用其它方法——如这个例子中,用于输出文本——或者创建对象并激活该方法。
正如你所看到的,Main方法返回一个void类型。
public static void Main()
尽管看到这些语句时,C++程序员肯定会觉得似曾相识,但是其他程序员并不如此。首先,public 的访问标志告诉我们这个方法可以被任何程序访问,这是它被调用的必要条件。其次,static 意味着没有先创建类的实例也可以调用方法——你所要做的就是用类名调用方法。
HelloWorld.Main();
但是,我不赞成在Main方法中执行这行代码,递归会导致堆栈溢出。
另一重要的方面是返回类型。对于方法Main,可选择void (意味着根本就没有返回值),或用int 为整型结果(应用程序返回的错误级别)。因此,两种可能的Main方法为:
public static void Main()
public static int Main()

C++程序员会同样知道后面我要提到的——可以传给应用程序的命令行参数数组。如:
public static void Main(string[] args)

我现在并不想详细地说明如何访问参数,但我想事先给C++程序员一个警告:和C++相比,应用程序路径不是这个数组的一部分。仅仅那些参数包含在这个数组中。
在对Main方法并不简短的介绍之后,让我们把注意力集中到唯一真正的代码行——这行代码在屏幕上显示"Hello Wold"。
System.Console.WriteLine("Hello World");
假如不是由于有了System,大家会马上猜到WriteLine是Console 对象的一个静态方法。那么System代表什么呢? 它是包含Console对象的名字空间(范围),实际上并不是每次都在Console对象前加上名字空间的前缀,你可以象清单3.2所示范的那样,在应用程序中引入名字空间。

清单3.2 在应用程序中引入名字空间
1: using System;
2:
3: class HelloWorld
4: {
5: public static void Main()
6: {
7: Console.WriteLine("Hello World");
8: }
9: }

所有你要做的就是给System名字空间加一个using指令。在这之后,不再需要规定名字空间,就可以使用它们的方法和属性了。NGWS 框架体系中有很多的名字空间,我只对巨大的名字空间池中的少数几个对象进行探讨。但在第八章 "用C#写组件"将介绍为你的对象创建自己的名字空间。

3.2 编译应用程序
由于NGWS Runtime支持所有的编译器(VB、C++和C#),你不必买一个单独的开发工具用来把应用程序编译成IL(中间语言)。但是,如果你从没有用过命令行编译器编译过应用程序(仅懂得编译名,而没有熟记), 它还是你的首要选择。
打开命令提示符并切换到存 helloworld.cs 的目录。敲入以下命令:
csc helloworld.cs

helloworld.cs 被编译并链接成hellworld.exe。因为源码没有错误(那当然!),C#编译器没有出错提示,在整个编译过程没有丝毫停顿。如图3.2所示。

图3.2 使用命令行编译器 csc.exe 编译应用程序

现在你已经准备好运行第一个真正用C#编写的应用程序。简单地在命令行上敲入helloworld,输出结果为 "Hello World"。
在继续往下介绍之前, 我想稍为想象一下第一个应用程序和一个编译器开关的使用:
csc /out:hello.exe helloworld.cs
这个开关告诉编译器输出文件命名为hello.exe。虽然这不是什么绝招,但它是这本书中用到的未来编译器的基本功。
3.3 输入和输出
到目前为止,我仅仅演示了把简单的常量字符串输出到屏幕。尽管这本书只介绍了C#编程的概念而不介绍用户接口编程,但我需要让你迅速学会简单的屏幕输入和输出方法——相应于C的scanf 和 printf,或者C++的cin 和cout。我不能提供VB相应的函数,因为屏幕访问不是该核心语言的一部分。
你只需要能够读用户的输入并提示一些信息给用户。清单3.3 说明如何读一个用户请求的名字输入,并显示一条已定制好的"Hello" 信息。

Listing 3.3 从控制台读输入信息

1: using System;
2:
3: class InputOutput
4: {
5: public static void Main()
6: {
7: Console.Write("Please enter your name: ");
8: string strName = Console.ReadLine();
9: Console.WriteLine("Hello " + strName);
10: }
11: }

第7行使用Console对象的一个新方法用于提示文本信息给用户,它就是Write方法。它与WriteLine不同的地方在于它输出时不换行。我使用这种方法以便用户可以在信息提示的同一行输入名字。
在用户输入他的名字后(并按回车键),ReadLine 方法读入了一个字符串变量。名字字符串连接到常量字符串"Hello",并用我们早已熟悉的WriteLine方法显示出来(见图3.2)。

图3.3 编译和运行定制的Hello 应用程序

你几乎已学完了NGWS框架必要的输入和输出功能。但是,你还需要为用户显示多个值。为用户写一个格式串。清单3.4展示一个例子。

清单 3.4 使用不同的输出方法

1: using System;
2:
3: class InputOutput
4: {
5: public static void Main()
6: {
7: Console.Write("Please enter your name: ");
8: string strName = Console.ReadLine();
9: Console.WriteLine("Hello {0}",strName);
10: }
11: }

第9行包含了使用格式串的Console.WriteLine语句。格式串例子如下:
"Hello {0}"
{0}代替WriteLine方法的参数表中紧随格式串后的第一个变量。你可以用该技术格式化超过三个变量。
Console.WriteLine("Hello {0} {1}, from {2}",
strFirstname, strLastname, strCity);

当然,并不仅限于只使用字符串变量。你可以使用任何类型,这些类型在后面的第四章 "C#类型"中有讨论。

3.4 添加注释
当写代码时,你应为代码写注释条文,解释实现的内容、变更史等。尽管你注释中提供的信息(如果有的话)是给你写的,但是你还是必须遵守写C#注释的方法。清单3.5 显示采用的两种不同的方式。

清单3.5 给你的代码添加注释

1: using System;
2:
3: class HelloWorld
4: {
5: public static void Main()
6: {
7: // 这是单行注释
8: /* 这种注释
9: 跨越多行 */
10: Console.WriteLine(/*"Hello World"*/);
11: }
12: }

"//" 符号用于单行注释。你可以用"//"注释当前所在行,或是跟在一个代码语句的后面:
int nMyVar = 10; // 胡说八道
所有在"//"后面的被认为是一条注释;所以,你可以同样用它们来注释一整行或一行源代码的部分。这种注释方式同C++中介绍的相似。
如果你的注释跨越多行,必须使用"/* */"的字符组合。这种方式在C中有效。除了单行注释外,这种方式在C++和C#中还同样有效。因C/C++和C#都使用这种多行注释方式,所以它们也使用相同的终结符。请看下列代码行:
/* Console.WriteLine("Hello World"); */

我使用"/* */"简单地注释一整行。现在我假定这一行是很长代码的一部分,而且我决定要暂时禁用一个程序块:
/*
...
/* Console.WriteLine("Hello World"); */
...
*/

这个结构所存在的问题为: "Hello World"那一行后面的"*/"终止了始于第一行的"/*"的注释,余下的代码对编译器有效,你将看到一些有趣的出错信息。至少 最后的"*/"被标志为归属错误。我只不过想提醒一下,让你了解这种错误。

3.5小结
在这一章中,你创建、编译并执行了第一个C#应用程序:著名的"Hello World"程序。我用这个短短的应用程序给你介绍有关Main方法,它是一个应用程序的入口点,也是出口点。这个方法可以没有返回值或返回一个整数错误级别。如果你的应用程序用参数调用,你可以(但不必要)读出并使用它们。
在编译和测试应用程序后,你学到了更多的由Console对象提供的有关输入和输出的方法。对于学习C#而言,它们足以创建出有意义的控制台例子,但用户接口的大部分将是WFC、WinForms或者ASP+。

时间: 2024-10-02 12:03:09

《.net编程先锋C#》第三章 第一个C#应用程序(转)的相关文章

> 前言(补充) 和第三章 第一个C#程序(rainbow 翻译)(来自重粒子空间)

程序 <<展现C#>> 前言(补充) 和第三章 第一个C#程序(rainbow 翻译)   出处:http://www.informit.com/matter/ser0000001/chapter1/ch03.shtml 正文: 前言0.1  提要    欢迎阅读<展现 C#>(Presenting C#).这本书是你提高企业编程语言的一条捷径.这种企业编程语言带有下一代编程语言服务运行时(NGWS Runtime):C#(发音"C sharp").

《精通 ASP.NET MVC 5》----第2章 第一个MVC应用程序 2.1 准备Visual Studio

第2章 第一个MVC应用程序 精通 ASP.NET MVC 5 鉴赏一款软件开发框架最好的方式是介入其中并使用它,本章将使用ASP.NET MVC框架创建一个简单的数据录入应用程序.笔者会将过程分解成一个个的步骤,以便笔者能够看出如何构造ASP.NET MVC应用程序.为了保持过程简单,这里将跳过某些技术细节.但不必着急,如果是MVC新手,你会发现大量感兴趣的内容.对于一些未进行解释的内容,笔者提供了参考章节,在那里你会看到完整的细节. 2.1 准备Visual Studio Visual St

《.net编程先锋C#》第二章 理论基础-公用语言 运行环境(转)

编程 第二章 理论基础-公用语言 运行环境既然你已经具有了C#全面的印象,我也想让你了解NGWS runtime的全貌.C#依靠由NGWS提供的运行时:因此,有必要知道运行时如何工作,以及它背后所蕴含的概念.所以,这一章分为两部分--它们是所有的概念和使用的基础.两部分的内容虽然有些重叠,但它有助于加深理解正在学习的概念. 2.1 NGWS RuntimeNGWS和NGWS Runtime为你提供了一种运行时环境.该运行时管理执行代码,并提供了使编程更容易的服务.只要你的编译器支持这种运行时,你

unix系统编程-关于apue第三章fcntl函数

问题描述 关于apue第三章fcntl函数 其中的if(val & O_APPEND )是什么意思,还有就是fcntl(fdF_SETFL0):和fcntl(fdF_GETFL0)第三个参数设置为0 分别是什么意思 解决方案 fcntl()函数fcntl函数fcntl 函数

《.net编程先锋C#》第一章 C#简介(转)

编程 第一章 C# 简介 欢迎您加入C#的世界! 这一章将把您引进C#的天地,并回答一些相关的问题,如:您为什么要使用C#,C++和C#的主要有什么不同点,以及为什么C#使开发更容易而且还使您感到很有趣.为什么是另外一种编程语言? 必须回答的一个问题:当您已经使用C++或VB从事企业开发时,为什么还要学习另一种语言? 市场式的回答就是:"在企业计算领域,C#将会变成为用于编写"下一代窗口服务"(Next Generation Windows Services,简写为NGWS

《.net编程先锋C#》第九章 配置和调度(转)

编程 第九章 配置和调度在上一章,你学到如何创建一个通用语言运行时(CLR)组件,且如何在一个简单的测试应用程序中使用它.虽然CLR组件就要准备装载了,但你还是应该思考以下技术之一:.条件编译.文档注释.代码版本化 9.1 条件编译 没有代码的条件编译功能,我就不能继续工作.条件编译允许执行或包括基于某些条件的代码:例如,生成应用程序的一个查错(DEBUG)版本.演示(DEMO)版本或零售(RELEASE)版本.可能被包括或被执行的代码的例子为许可证代码. 屏幕保护或你出示的任何程序.在C#中,

“AS3.0高级动画编程”学习:第三章等角投影(上)

什么是等角投影(isometric)? 刚接触这个概念时,我也很茫然,百度+google了N天后,找到了一些文章: [转载]等角(斜45度)游戏与数学 [转载]使用illustrator和正交投影原理以及基本三视图制图 以及这篇ppt:http://files.cnblogs.com/yjmyzz/Isometric.rar 建议先耐心看完这三篇文章,再往下看: 在之前学习的3D基础.3D线条与填充.背面剔除与 3D 灯光 中,我们所采用的3D坐标系,基本上都属于3D透视投影坐标.通俗点讲:就是

“AS3.0高级动画编程”学习:第三章等角投影(下)

在上一篇的最后,我们成功的用"等角投影"模拟出了立体空间的盒子模型,但是很快你就会发现这个示例的bug bug1:在已经有box的地方,再点击,将会重复创建box新实例. bug2:后面添加的box,会挡住前面添加的box. bug3:在边缘部分,如果用鼠标小心的点击,可以创建出很多超出world范围之外的盒子(即:看起来好象挂出去了) 我们按轻重缓急来处理吧: bug2最严重,它直接影响了最终的3D视觉效果.产生它的原因是显示列表中,后添加的物体,其index值会比 前面添加物体的i

《.net编程先锋C#》前言

编程 前言0.1 提要欢迎阅读<展现 C#>(Presenting C#).这本书是你提高企业编程语言的一条捷径.这种企业编程语言带有下一代编程语言服务运行时(NGWS Runtime):C#(发音"C sharp").NGWS Runtime 是一个不仅管理执行代码.同时也提供使编程更加容易的动态环境.编译器产生受管代码以指向这种受管理执行环境.你获得跨平台语言集成.跨平台语言异常处理.增强安全性.版本控制.安排支持和查错服务.支持NGWS Runtime 的主要语言是C