撰写了文章 更新于 2019-12-27 17:37:42
从C#开始的编程入门——回首第一次
“头图是《第一次的辣妹》”
在上一篇中我们运行了我们的第一个C#程序,它向终端输出了Hello, world。这次的文章不会太长,我们来看看在C#中是如何做到的。
using和命名空间
源文件第一行开头的using关键字代表将指定的命名空间(namespace)引入本文件中。它就像Java和python中的import。如果你是C++程序员那么你可能更熟悉。不过引用时不需要加namespace,定义时才需要namespace。这些命名空间来自其他文件和程序集(assembly,汇编也叫assembly,但是微软指导将这个名称翻译成程序集),它们由其他库(library)、开发者提供给我们,我们在需要时进行引用。System命名空间正如其名,是标准库中非常基础非常重要的一部分,其中包含了非常多的基本的、常用的类型。
我知道你可能很多问号。说白了,这就是表示你想要吃现成的,这些是别人给你写好了的。你以后也可以把写好的代码和库,按照命名空间组织起来,需要的时候再进行引用。
Program类
Program是一个名称,它是本文件中唯一一个类(class)的名称。它前面的class关键字(keyword)表明了它是一个类。紧接着一对花括号包裹起来的内容就是这个类的内容。C#是完全面向对象的语言,函数都必须出现在类中,也就是说不存在全局函数。这个时候函数更加合适的名称是方法。关于面向对象的相关知识我们在之后详细介绍。
类是一种组织代码的方式,它会把很多东西组织到一起,其中就包括许多方法。
Main方法
下面着眼于Main。它是本文件中定义(现在请把定义理解为“写”)的Program类的唯一的一个方法(method)的名称。它是我们的程序的入口,也就是说我们整个程序会从这里开始。可执行的程序通常都需要这样的一个入口。类似的概念在C/C++和Java中也有出现。
啥叫方法啊?现在,请把它当成函数(function)理解。按照中小学的数学知识来理解,给出一个自变量,得到一个因变量的值。编程里面也有函数的概念,我们提供一些东西,通过函数内部代码的执行,最终得到一些结果。函数是组织代码的一种方式。不过接下来的一段时间我们只会尝试在这个Main里面增加我们的代码。
这个方法里面唯一的一行代码(事实上也是整个程序唯一一行有实际作用的代码)就是Console.WriteLine。Console也是一个类,WriteLine就是它包含的一个方法,要使用类里面的方法,我们使用这个.运算符。注意,是英文句点。它的大名叫成员访问运算符。通过它我们可以访问类里面的各种东西。(小知识:不是所有有类似概念的编程语言都使用.来进行成员访问。比如Objective-C使用所谓消息传递机制在访问成员的时候使用的是方括号。这也是很多人说它语法诡异的原因之一。个人觉得还挺好看的。)
这里的WriteLine,顾名思义,它的功能就是输出一行内容。如果你把鼠标放到它上面,会有提示方法的注释。那么内容是什么呢,且看圆括号里面的内容,双引号引用的内容被称为字符串(string)。也就是字符连成的串。如果字符串是字符组成的串,那么有没有字符呢。好问题,答案是有。使用单引号引用的内容就是一个字符。
这个字符串会作为WriteLine的参数,什么是参数,回想上面关于函数的比喻,参数就相当于我们提供的一个自变量,函数会利用它进行相关的操作。和真正的函数不同的是,程序里面的函数不一定有返回值。
如果你把鼠标放到Console上,你会发现提示上写着System.Console,这是Console的全名,这意味着它来自前面说的System命名空间。使用using指令引入命名空间的另一个作用就是偷懒。如果你删去using这一行,你会发现提示找不到Console。但是如果这时你把Console改成System.Console,你会发现代码又可以正常工作了。引入命名空间后,在没有歧义的情况下(即其他地方没有重名的东西)可以省去名称前面的命名空间。
请熟记这个函数的名称,它会伴随你一生,是非常常用的函数。提示一个小技巧,无论你用的是VS还是VS Code,都可以输入cw然后出现智能感知(IntelliSense,是微软给代码自动补全取的名字)后敲tab键快速输入这个函数。
这一行的最后有一个分号,注意这也是英文符号。事实上每一行语句都需要以分号作为结尾——比如说前面的using那行也有,否则会发生错误。事实上,世界上确实有结尾不需要分号的语言,比如Python和Swift。
尝试一下
把字符串中的内容改成你喜欢的内容。比如你的名字。然后使用dotnet run命令。如果你是老司机安装了插件或者使用的是VS,可以使用F5开始调试或者直接运行。看看是否输出了预期结果。
记得放在双引号里面
从下一篇文章开始,我们开始尝试自己动手写点什么。不过之后的内容可能更新没这么快了,这两天连发是因为有些我之前写好了一部分(
目录