剑英陪你零基础学c#系列(一)Hello World
作者:李剑英 原文:http://www.taidous.com/forum.php?mod=viewthread&tid=33079&_dsign=fe01206a
引言
剑英陪你系列又和大家见面了。我热爱每一位程序员,尤其是年轻漂亮的女程序员。最近组织朋友们进行了一次即兴团体诗创作,但创作内容总是走向“厕所文化”,卫生纸的出镜率极高,这让我对这个群体的心理健康深感担忧,看来提升大家的素养任重而道远啊。在此,也让我们一起响应“暴走九月不撸”的号召。
从Hello World开始
你或许已经看过无数个Hello World程序,不知你当时是何种感受,是兴奋、失望、满足,还是早已记不清当时的感觉了?我也记不清自己入门时的感受了,毕竟那已经是很久以前的事,很多细节都已模糊。于是,我决定开启这个系列,和你一起重新出发,以一无所知的心态去探索C#的世界。
如果你在阅读过程中遇到不明白的名词,不必担心,这并不影响你对整体内容的理解。如果你是强迫症患者,可以自行百度查询。要是觉得内容枯燥无味,请直言指出,我会虚心接受并修改。
什么是C
C#,这个名字乍一听可能让人有些疑惑。要了解它的由来,我们得把时间往前推。当时,除了微软,还有一家强大的开发工具商Borland。这两家公司竞争激烈,后来微软挖走了Delphi之父安德斯·海尔斯伯格。当然,Borland的衰落并非仅仅因为失去这位大神,实际上他在Borland当时也没有太多重要的工作。
微软挖到了宝,当时微软的主要开发工具是Visual系列,主力产品有Visual C++、Visual Basic和Visual FoxPro。现在大家熟知的Visual Studio,其实就是Visual系列的打包组合。
当时,业界出现了一款具有全球影响力的产品——Java。Java非常强大,安德斯来到微软后,第一件事就是仿照Java开发了Visual J++。然而,这引发了官司,微软败诉,Visual J++无法继续销售。
之后,盖茨和安德斯经过思考,认为不能错过这个潮流,还是要继续开发类似的产品,但要避免与Java过于相似。于是,他们推出了.NET平台,将语言和字节码拆分成相互独立的部分。至于所使用的语言,由于有J++的历史背景,又具备C++的特点,有一种说法是最终命名为C++++,四个“+”组合成了“#”。C#的发音是“C sharp”,中文可理解为“犀利C”。
C#与我有什么关系
需要注意,下面这段内容是关于Unity和C#之间关系的解释,如果你看不懂也没关系,记住Unity和C#有密切关系即可。
Unity采用了Mono作为脚本引擎,而Mono是.NET的一个开源实现。.NET最主要的开发语言是C#,所以在使用Unity进行开发时,最主要的开发语言也是C#。
在Java体系中,JAVA语言、JAVA字节码、JAVA运行时和JAVA基本类库都统称为Java。而微软和C#这边的情况则有些复杂,C#语言、MSIL字节码、.NET运行时和.NET Framework有三种不同的名称。之所以不采用和Java一样的命名方式,是因为如果太相似会涉及法律问题。
.NET,有时也简称为“.NET”,它是C#的运行时环境,.NET Framework是C#的基本类库。MSIL是字节码,存储字节码的文件通常是PE文件,也就是我们常见的.dll文件和.exe文件。微软将语言、字节码和运行时类库分开,带来了一个优点,即可以创建多种能够混用类库的语言。
后来,微软将C#、MSIL和.NET的标准提交给了国际标准化组织,使其成为国际标准,任何开发者都可以遵循。有一位热爱C#和.NET的开发者,希望在Linux系统上使用.NET,而微软主要专注于Windows平台。在标准化之后,这位开发者开发了Mono,并成立了一家名为Xamarin的公司。
Mono遵循与.NET相同的标准,但实现了跨平台执行的功能。Unity跨平台的关键技术就是Mono,虽然现在Unity自己开发了IL2CPP,但这其中的细节就需要你自己去体会了。这种复杂的关系就像近亲杂交一样,需要慢慢消化理解。
如果你想成为一名Unity程序开发工程师,那么C#是你必须学习的语言。
C#怎么学
注意,下面这段内容是解释为什么学习Unity却要安装一个看似与Unity无关的软件。有时候,学习就是这样无奈,一些基础知识看似对直接使用Unity进行开发没有帮助,但它们却是必不可少的。
C#是微软的“亲儿子”,微软为其开发了集成开发环境Visual C#。现在要找到独立的Visual C#下载并不容易,因为微软将其打包在Visual Studio中进行销售。建议你下载并安装VS2013,社区版是免费的,旗舰版的序列号也比较容易获取。
安装Visual Studio
如果你在安装VS时遇到问题,可能需要重装Windows系统。如果你使用的是MacBook,很抱歉,我们主要以Windows和Visual Studio为例进行讲解,你需要自己想办法解决环境问题。
创建第一个C#控制台项目
安装好VS后,我们来创建第一个C#控制台项目,编写我们的第一个Hello World程序。在创建项目时,模板里选择Visual C#,项目类型选择控制台应用程序。
为什么要从控制台应用程序开始呢?在Windows系统中,控制台程序是以命令行输入输出的方式进行交互的程序。如果你经历过DOS时代,对这个概念应该不会陌生。控制台程序非常单纯,只有一种输入和一种输出方式,并且有一个入口函数,函数执行完毕程序就会退出。使用这样简洁的测试环境,我们能更清晰地观察程序的运行情况。
认识Visual Studio界面
新建好项目后,在开始讲解代码之前,我们先来认识一下Visual Studio的界面。VS采用了流行的Dock界面形式,即每个界面部分可以独立取出并重新组合,所以你看到的VS界面可能会有所不同,不必担心。
每个界面部分称为一个视图,如果你不小心关闭了某个视图,可以从菜单栏的“视图”选项中找到并重新打开它,还有一部分视图在“调试”菜单中。
接下来,你要认识的第一个视图是“解决方案资源管理器”。VS在组织项目时采用了两层概念,即项目和解决方案。一个项目负责生成一个.exe或.dll文件,一个解决方案可以包含多个项目。一切操作的起点都是这个解决方案资源管理器。
在Hello World项目上右键选择“属性”,你可以看到程序集名称,它就是项目生成的.exe或.dll文件的名称,我们可以将其修改为h01。同时,你还可以修改生成的输出路径,使用相对路径或绝对路径均可,这样方便我们找到生成的文件。
你可以从“生成”菜单中选择“生成解决方案”,也可以从资源管理器右键操作,或者使用快捷键来完成项目的生成。如果一切正常,输出视图会显示相应的信息,要时刻关注输出视图。
生成完成后,你会得到一个.exe文件,但点击它时,窗口会一闪而过。这是因为程序会自动在命令行中执行,执行完毕后就会退出。
编写真正的Hello World代码
前面的步骤只是让你熟悉开发环境,现在我们来编写真正的Hello World代码,只需要三行。从解决方案资源管理器中双击program.cs文件,将代码修改如下:
using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello World!");
Console.ReadLine();
}
}
请注意以下几点:
- 语句结尾使用分号“;”,而不是冒号。
- C#是区分大小写的,例如Console和console是不同的。
- “//”之后的内容是注释,可以随意编写,不会影响程序的执行。
修改代码后,重新生成项目,找到生成的.exe文件并运行。这时,窗口不会再一闪而过,你将看到“Hello World!”的输出,至此,我们的Hello World程序就完成了。关于调试的内容,我们将在后续讲解。你可以尝试写下自己想对世界说的话,然后生成一个.exe文件并执行它。
发生了什么
我们已经编写了一个C#程序,那么在这个过程中到底发生了什么呢?你可能认为程序员眼中的代码就像《黑客帝国》里那样神秘,但实际上代码看起来就像小学生的关系图一样,有一定的规律可循。
C系语言有语句和块的概念。语句以“;”结尾,不过有些特殊语句以换行符结束,在这个程序中没有涉及这种特殊情况。块是用“{}”包裹起来的部分,根据语法,块前后还会有关键字。
语句和块的分析
- 命名空间(Namespace):
namespace helloworld开头的部分就是命名空间,它主要用于管理名字。例如,使用using语句可以方便地引用命名空间中的内容,避免使用冗长的名称。using语句是可选的,如果不使用,代码会变得更加繁琐。 - 类定义(Class):
class叫做类型定义语句块,可简称为类定义。类是面向对象编程的重要概念,用于对事物进行归类。命名空间下通常包含类语句块,类语句块中可以包含成员语句或成员语句块,成员包括函数和变量,它们是基本的编程单位。这里使用了两种类定义,class和public class,public是修饰符,表示这个类可以被其他模块(如.dll或.exe文件)访问。 - 函数定义:函数定义与命名空间和类的定义不同,它没有关键字。在C系语言中,函数的语法约定为【修饰符】返回类型 名称 (【参数…】)。例如,
static是修饰符,void表示返回类型为空,Main是函数名称,括号内可以包含参数,即使没有参数也必须有括号。Program.Main是控制台程序的入口函数,args是控制台程序输入的指令,我们将在下一节详细讲解。 - 函数调用语句:在这个程序中,我们学习了两个函数调用语句
Console.WriteLine和Console.ReadLine。
下次再见,希望你在学习C#的过程中有所收获。如果你是强迫症患者,希望了解每一个细节,相信上述内容能满足你的需求。