分享
 
 
 

<<展现C#>> 前言(补充) 和第三章 第一个C#程序(修订)

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

前言

0.1 提要

欢迎阅读《展现 C#》(Presenting C#)。这本书是你提高企业编程语言的一条捷径。这种企业编程语言带有下一代编程语言服务运行时(NGWS Runtime):C#(发音"C sharp")。

NGWS Runtime 是一个不仅管理执行代码、同时也提供使编程更加容易的动态环境。编译器产生受管代码以指向这种受管理执行环境。你获得跨平台语言集成、跨平台语言异常处理、增强安全性、版本控制、安排支持和查错服务。

支持NGWS Runtime 的主要语言是C#。支持NGWS框架的很多程序是用C#写的,因此,在一些带有NGWS Runtime的编译器中,它的编译器可以被认为是非常经得起测试且是经过优化的。C#语言借鉴了C++,但是具备现代化和新增的类型安全——使C#成为企业解决方案的首选语言。

0.2 谁应该读这本书

如果你对编程很陌生,这本书不适合你。这本书企图让程序员解脱并使用C#,基于他们已经拥有的知识。《展现 C#》的目标瞄准了已经具有如C/C++、VB、Java或其它编程经验的程序员。

如果你具有C++的背景,转向C#会很容易,但是,如果你精通于其它不同的语言,这本书也会耗掉你的一些日子。如果你有一点COM编程的知识,这本会更有趣,但会COM编程不再是必要的。

0.3 这本书如何组织

第一章 C#简介——这一章把你带到C#逛一回,同时回答了有关你应该考虑学习C#的问题。

第二章 NGWS Runtime 的技术基础——介绍NGWS Runtime为运行的C#代码所提供的低层架构。

第三章 第一个C#应用程序——创建真正第一个C#应用程序(否则它是什么呢?),它就是一个"Hello World"应用程序。

第四章 C#类型——可以看到用在C#应用程序中的各种类型。探索值型和引用型的区别,还有如何加框和消框。

第五章 类——C#功能真正强大的标志,它是具有类的面向对象的编程。你会学到好多好多的东西,如构造函数、析构函数、方法、属性、索引和事件等。

第六章 控制语句——对应用程序实行流程控制。探索C#提供的各种选择和陈述语句。

第七章 异常处理——获得了编写实现异常处理的应用程序技巧,拥有这种技巧,在NGWS Runtime世界,你是一个好的公民

第八章 用C#写组件——用C#构建组件,因为支持NGWS Runtime,它可以被不同语言平台的客户使用。

第九章 配置和安排——学到如何用C#有条件地进行编译工作,和如何为你的C#源码自动地创建文档。另外,这一章将介绍到NGWS的版本技术问题。

第十章 用非受管代码交互操作——发现你如何使用C#内部的非受管代码,且非受管代码如何与你的C#组件一起交互操作。

第十一章 C#代码查错——获得使用SDK查错工具的技巧,可以在应用程序中准确地找到错误并修改它们。

第十二章 安全——探索NGWS Runtime的安全概念。学到代码访问安全性和基于角色的安全性。

0.4 使用这本书你需要什么?

从这本书的观点看,你所需要的就是下一代windows服务软件开发包(NGWS SDK)。尽管至少只要有NGWS Runtime 和C#编译器就可以,但当探索这些激动人心的新技术功能 时,在一台机器上装有说明文件档和所有的SDK工具(包括debugger),将是一个极好的主意。

这本书不需要你装在机器上的Visual Studio 7的任何工具。我仅建议你要有一个优秀的支持行数的程序编辑器,用以编辑C#源文件。

……

(省略掉一些有关出版过程和表示感谢的段落)

0.5 关于作者

Christoph Wille,微软系统工程师(MCSE)、微软系统开发师(MCSD)、Netware网络管理员(CNA)和MCP-IT,作为一个网络咨询人员和程序员,特别精通Windows DNA。微软认为他是ASP方面最有价值的人(MVP),他是和微软在一起使用早期的C#版本的少数开发者之一。

Christoph 独自或参与了几本书的写作,包括Sams出版社的《自学ADO2.5 21天》、《自学ASP 24小时》、《自学MCSE TCP/IP 14天》和《MCSE 训练指南:SQL Server 7管理》。

第三讲 第一个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.3)

图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.3 添加注释

当编写代码时,你应为代码写注释条文,解释实现的内容、变更史等。尽管你注释中提供的信息(如果有的话)是写给自己看的,但是你还是必须遵守写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.4 小结

在这一章中,你创建、编译并执行了第一个C#程序:著名的“Hello World”程序。我利用这个简短的程序为你介绍了有关Main方法,它是一个程序的入口点,也是出口点。该方法可以没有返回值或返回一个整数错误代码。如果你的程序用参数调用,你可以(但不必要)读取并使用它们。

在编译和测试程序之后,你学到了更多的由Console对象提供的有关输入和输出的方法。对于学习C#而言,它们足以创建出有意义的控制台程序,而用户接口的大部分将用于WFC、WinForms或者ASP+。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有