c#语言,net平台的编程语言,如何编写第一个c#应用程序呢?菜鸟学习难。 开始吧(let's start) 第一个程序老是很是简单的。咱们让用户经过键盘输入本身的名字,而后程序在屏幕上打印出一条欢迎信息。程序的代码是这样的:程序员
新建窗体,输入程序清单: using System;编程
class Welcomec#
{ 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#中的含义与些相似,用于导入预约义的元素,这样在本身的程序中就能够自由地使用这些元素。命令行
若是没有导入名字空间的话,咱们该怎么办呢,程序还能保持正确吗?答案是确定的。那样的话,咱们就必须把代码写成下面的样子:debug
程序清单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