编写第一个c#应用程序---my diary

c#语言,net平台的编程语言,如何编写第一个c#应用程序呢?菜鸟学习难。 开始吧(let's start) 第一个程序总是非常简单的。我们让用户通过键盘输入自己的名字,然后程序在屏幕上打印出一条欢迎信息。程序的代码是这样的:

新建窗体,输入程序清单: using System;

class Welcome

{ static void Main(){ Console.WriteLine("Please enter your name:"); Console.ReadLine(); Console.WriteLine("Welcome to you!"); } }您可以在任意一种编辑软件中完成上述代码的编写,然后把文件存盘,文件名叫做Welcome.cs。典型的C#源文件通常都是以“.cs”作为文件的扩展名。

3.2 代码分析

首先要提出的是,C#语言是大小写敏感的。这一点对于C和C++程序员没什么问题,只是要提醒一下VB和Delphi程序员。

接下来让我为您逐条分析上面的C#程序语句。

3.2.1 名字空间

using System表示导入名字空间。高级语言总是依赖于许多系统预定义的元素。如果您是C或C++程序员,那么您一定对使用#inclued之类的语句来导入其它C或C++源文件再熟悉不过了。C#中的含义与些类似,用于导入预定义的元素,这样在自己的程序中就可以自由地使用这些元素。

如果没有导入名字空间的话,我们该怎么办呢,程序还能保持正确吗?答案是肯定的。那样的话,我们就必须把代码写成下面的样子:

程序清单3-2:

class Welcome { static void Main(){ System.Console.WriteLine("Please enter your name:"); System.Console.ReadLine(); System.console.WriteLine("Welcome to you!"); } }也就是说,在每个Console前加上一个前缀"System."。这个小原点“.”表示Console是作为System的成员而存在的。C#中抛弃了C和C++中繁杂且极易出错的操作符象“::”和“->”等。C#中的复合名字一律通过“.”来连接。

System是.NET平台框架提供的最基本的名字空间之一。有关名字空间的详细使用方法我们将放在第十七章中详细介绍。在这里,只要我们学会怎样导入名字空间就足够了。

3.2.2 类和类的方法

让我们从写第一个程序时就记住:每个东西都必须属于一个类。如果您是C或C++的程序员,请暂时忘掉那些全局变量。

在程序的第二行,class Welcome声明了一个类,类的名字叫做Welcome。这个程序为我们所作的事情就是依靠它来完成的。

和C、C++中一样,源代码块被包含在一对大括号“{”和“}”中。每一个右括号“}”总是和它前面离它最近的一个左括号“{”相配套。如果左括号“{”和右括号“}”没有全部配套,那程序就是一个错误的程序。

static void Main()表示类Welcome中的一个方法。方法总是为我们完成某件工作的。

注意:在C#程序中,程序的执行总是从Main()方法开始的。一个程序中不允许出现两个或两个以上的方法。对于习惯了写C控制台程序的读者,请牢记:C#中Main()方法必须被包含在一个类中。

3.2.3 程序的输入和输出

程序所完成的输入和输出功能都是通过Console来完成的。Console到底是什么呢?它是在名字空间中System已经为我们定义好的一个类,这里我们不用管它是怎么完成工作的,只要使用它就可以了。

上面的代码中,类Console为我们展现了两个最基本的方法:WriteLine和ReadLine。 Console.ReadLine表示接受输入设备输入,Console.WriteLine则用于在输出设备上输出。

我们再为读者介绍Console中用于输入输出的另两个方法:Read和Write。它们和ReadLine与WriteLine的不同之处在于,ReadLine和WriteLine执行时相当在显示时多加了一个回车键,而使用Read和Write时则光标不会自动转移到下一行。

让我们再对例子程序进行扩展,使得用户的输入对输出产生作用。

程序清单3-3:

using System; class Welcome { Static void Main(){ Console.WriteLine("please enter your name:"); string name=Console.ReadLine(); Console.WriteLine("Welcome to you,{0}!",name); } }我们用到了string name=Console.ReadLine()这条语句。其中string name表示声明一个字符串类型的变量 name。系统定义的Console类提供的方法ReadLine()的返回值类型为string。所以,这句话表示从输入设备读取一个字符串,并把读取的值赋予变量 name。

再来看一下程序的最后一条输出语句:

Console.WriteLine("Welcome to you,{0}!",name);

这条语句表示在屏幕上对输出的字符串进行格式化。其中表示用方法的第二个参数来替代格式化后字符串相应的位置。对字符串进行格式化的参数可以是一个字符串,也可以是一个字符,或者是一个整数,等等。采用这种方式最多可以格式化三个变量。比如:

int x=3;

string name1="Mike";

string name2="John";

Console.WriteLine("Welcome to you {0} times,{1} and {2}!",x,name1,name2);

和绝大多数编程语言一样,C#提供了字符串类型string,它与C中的MFc为我们提供的类十分类似。C#中的string类型是一个引用类型(引用类型在第四章中我们有详细说明),为标准字符集。利用string可以方便地对字符串进行连接、截断等操作。

比如:

string s="Good"+"Morning";

char x=s[3];

例子演示了字符串s由两个字符串"Good"和"Morning"相加得到。字符串还可以通过下标进行索引,得到一个字符。上面的例子中字符X的值为“d”。

所以,源程序3-4和源程序3-3没有什么区别:

程序清单3-4:

using System; class Welcome { static void Main(){ Console.WriteLine("Please enter your name:"); string message="Welcome to you"+Console.ReadLine(); Console.WriteLine(message); } } 3.3 运行程序

理解了源程序中每条代码的具体含义后,下一步要做的就是让这个程序真正能够运行。不过对源代码即使还有不明白的地方也没有关系,在后续章节的学习中,您最终会熟练掌握这些概念的。

如果您的电脑上安装了Visual Studio.Net,则可以在集成开发环境(Integrated Developer Environment,IDE)中直接选择快捷键或菜单命令,编译并执行源文件。

如果您不具备这个条件,那么您至少需要安装Microsoft.Net Framework SDK,这样才能够不妨碍您在本书中继续学习C#语言。实际上,.Net平台内置了C#的编译器。

下面让我们使用这个微软提供的命令行编译器对我们的程序进行编译。

启动一个命令行提示符,在屏幕上输入一行命令:

csc welcome.cs

我们假设您已经将welcome.cs文件保存在当前目录下。如果一切正常,welcome.cs文件将被编译、运行,屏幕上出现一行字符,提示您输入姓名:

Please enter your name:

输入任意个字符并按下回车键,屏幕将打印出欢迎信息:

Welcome to you!

注意:和目前为止我们使用过的绝大多数编译器不同,在C#中,编译器只执行编译这个过程,而在C和C++中要经过编译和链接两个阶段。换而言之,C#源文件并不被编译为目标文件(.obj),而是直接生成可执行文件(.exe)或动态链接库(.dll)。C#编译器中不需要包含链接器。

编译选项

我们可以灵活地使用.Net平台提供的命令行编译器的不同选项,选择不同的编译方式,从而灵活地对编译进行控制。

例如,如果我们希望对源文件welcome.cs进行编译,生成名为MyWelcome.exe的可执行文件,我们可以采用这样的命令:

csc/out: MyWelcome.exe welcome.cs

如果我们并不需要一个可执行文件,而仅仅是希望简单地检查源文件中是否存在语法错误,则命令可以写成:

csc/nooutput: welcome.cs

如果不知道各个选项的具体含义,可以通过求助来获得:

csc/?

为方便读者,我们在表3-1中按字母排序的顺序列出了命令行编译器csc常用的参数及其用途。更详细的信息请参阅C#联机帮助文档。

表3-1 命令行编译器选项

选项 作用 @ 指定响应文件 /? 列出编译命令选项 /addmodule 指定一个或多个模块作为装配的一部分 /baseaddress 指定载入动态链接库的首选地址 /bugreport 生成一个报告文件,其中包含程序Bug的详细信息 /checked 指定算术运算的溢出是否会导致程序在运行时抛出一个异常 /codepage 指定编译的所有源文件所使用的代码页 /debug 给出调试信息 /define 定义预处理程序的符号 /doc 由文件注释生成XML文件 /fullpaths 指定输出的绝对路径 /help 列出编译命令选项 /incremental 允许对源文件进行递增式编译 /linkresouce 在装配时链接指定的NET资源 /main 指定Main方法所处的位置 /nologo 编译过程中不显示编译信息 /nooutput 编译源文件但不输出 /nowarn 编译过程中不生成警告信息 /optimize 指定编译时是否进行优化 /out 指定输出文件 /recurse 搜索子目录以寻找源文件 /reference 从包含装配的文件中导入元数据 /resource 把NEt资源内嵌到输出文件 /target 指定输出文件的格式 /target:exe 输出文件为exe可执行文件 /target:library 输出文件为链接库 /target:module 输出文件为模块 /target:winexe 输出文件为winexe可执行文件 /unsafe 允许编译使用了不安全关键字的代码 /warn 设置警告级别 /warnaserror 把警告信息作为错误看待 /win32icon 把.ico图标文件插入到输出文件 /win32res 把Win32资源插入到输出文件 3.4 添加注释

应用程序并不是只要你自己一个人能看懂就行了。不管以前计算机教师或者是编程书籍是否已经告诫过,这里我还要一再强调:养成良好的代码注释的习惯。这是一名优秀的程序员所必备的条件之一。代码注释不会浪费您的编程时间,它只会提高您的编程效率,使您的程序更加清晰、完整、友好。

C#注释的方式和C++没有区别,每一行中双斜杠“//”后面的内容,以及在分割符“/”和“/”之间的内容都将被编译器忽略。

这样,我们就可以采用“//”进行单行注释,采用分割符“/”和“/”进行多行注释。让我们对Welcome程序加上注释:

程序清单3-5:

//源文件:welcome.cs

/*说明:这里是我的第一个

C#程序 */

using System;

class Welcome { static void Main(){ Console.WriteLine("please enter your name:"); //要求用户输入姓名: Console.ReadLine(); //读取用户输入; Console.WriteLine("Welcome to you!"); /本行代码用于打印欢迎信息: 您可以在这里添加自己的代码: 程序在这里结束/ } }上面的注释似乎有些小题大作,但它毕竟说明了C#中注释的使用方法。

下面是对C#程序进行注释时要注意的两个问题:

首先,避免在“//”之后的单行注解中使用反斜杠符号“\”。因为反斜杠符号“\”在C#中是一个续行符,这样做往往会导致你所不希望的结果出现。例如,当你写了类似于下面的代码:

Console.WriteLine("The result is:{0}",//
150);

在编译这段代码时,“//”表示逻辑上同一行剩余的所有文字被作为注释看待,而续行符“\”则将这一行同下一行连接起来,那么第二行也被作为注释的一部分。这时编译器找不到与第一行的左括号“(”相匹配的右括号“)”,因此编译出错。

其次,分割符“/”和“/”之间的注释不能有嵌套注释。这是因为,C#编译器从遇到第一个分割符“/”开始,将忽略下一个“/”,直到遇上下一个与之匹配的分割符“/”才认为注释结束,这样编译器就会对多余的“/”报告错误,认为没有“/*”与之相匹配。

一些程序员经常习惯于把程序中不需要或暂时不需要的代码片段首尾分别加上分割符“/”和“/”。这时,如果这些代码片段本身又含有注释的话,我们所讨论的这种错误就会发生。这时,我们建议您换一种方式,把预处理语句# if #endif等贯穿在程序中使用,因为它们可以强制编译器忽略已包含注释的源代码片段,从而通过这种方式来实现源代码的嵌套注释。

以上提到的在注释中可能发生的两种问题,如果编译器报告错误,那已经是幸运的了。如果是原本错误的程序被认为是正确的加以编译,或者程序代码的原意因此被曲解,造成的错误往往难以发现,那时造成的后果将会严重得多。

菜鸟与老鸟的差别,只会写程序代码,不会调试源代码。 往往要实际 ok

转载于:https://my.oschina.net/bigfool007139/blog/392818

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值