正在加载...

第一个程序

你已经安装了 SDK,并运行过第一个实验。屏幕显示了 pine。本页仍用同一程序形状,但问的是另一个问题:文件里哪一行写出了那个词,哪些行什么也没写。你不会再次安装 .NET。上一页的版本行可以保持原样。保留名为 Pine 的公开类,保留 Main,也保留 Console.WriteLine("pine");。你要解释的屏幕仍是一行,而那一行是 pine。

文件里不止一行,所以第一反应往往是:文件的每一行都会变成屏幕上的一行。这个猜测是错的,本页其余部分会说明原因。有几行是在命名。只有一行在写出。花括号把这些行分组。它们也不写出。当你能对着眼前的文件指出写出行时,本页就完成了。下一页会加入一条屏幕不会显示的备注。它不会改变 pine。

the whole Pine file

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Console.WriteLine("pine");
    }
}

using System 准备短名

第一条有用的行是 using System;。把它读成准备行,而不是屏幕会打印的句子。它把 System 命名空间里的名字收成短形式,这样 Console 不必写成长路径。你不会在屏幕上看到 using。你也不会在屏幕上看到 System。若在错误实验里删掉这一行,短名 Console 稍后可能失败——那是改天的编译故事。在本页这一行保留,屏幕仍是 pine,因为这一行不写出。

类行给类型命名

下一条类型行是 public class Pine。把它读成三个各有职责的词,而不是屏幕文字。public 表示其他代码可以使用这个类型。你不会在屏幕上看到 public。class 表示这个文件在定义一个有名字的单元。你不会在屏幕上看到 class。Pine 是该单元的名字。在这种教学形状里,文件名主干与该名字一致。改掉这一行上的名字,文件命名习惯也必须一起改。那条规则关于类型和文件。它不关于屏幕。再看一眼屏幕。屏幕不显示 Pine。它显示 pine。大写 P 与小写 p 不是同一个词。类行永远不会把自己的名字写到屏幕上。

那一行后面的字符是左花括号 {。文件稍后匹配的右花括号结束类体。花括号之间的一切都属于类 Pine。花括号是围栏。它们告诉 C# 这个单元从哪里开始、到哪里结束。围栏不是给屏幕看的文字。你不会在 pine 旁边看到 { 或 }。若删掉左花括号,文件就坏了,编译器会写出错误而不是保持安静。那个错误不是本页的主题。本页保留两个花括号,屏幕仍是 pine。

Main 行是 runtime 开始的地方

下一行是 public static void Main()。有人问程序从哪里开始时,会指向这一行,关于起点他们是对的。若接着说屏幕显示 Main,他们就错了。你运行项目时,runtime 会寻找这种形状的方法。它从这一行开始运行。开始不等于写出。这一行上的词是关于如何开始的指令。它们不是给屏幕看的词。

把这些词一个一个拿出来,对照屏幕检查。public 再次表示该方法可以从外部启动。static 表示 runtime 不必先构造对象就能启动这个方法。你还没遇到对象,所以只需知道:在这种教学形状里 static 是必需的,并且不会被打印。void 表示这个方法不向调用方交回值。本页没有调用方故事,void 也不在屏幕上。Main 是 runtime 在这种形状里查找的名字。屏幕仍然不显示那四个字母。圆括号标出参数列表。本页列表为空。空圆括号也不会打印。

所以 Main 行可以同时在两种意义上成立。runtime 确实从那里开始。屏幕没有从那一行收到任何一个词。若你的目光停在 Main 上,只因为它坐在文件中间,就挪开。你从屏幕记住的词是 pine,而 pine 并不写在这一行上。

内层行写出 pine

在 Main 内部、在它自己的花括号之间,还有一行。那一行是 Console.WriteLine("pine");。这就是写出屏幕的行。它在文件里缩进,好让你看出它坐在 Main 里面。缩进是空格。空格也不会写到屏幕上。runtime 运行这行内层语句,因为它位于程序开始的方法之内。屏幕使用这行内层语句写出的内容。它不使用外层方法的名字。

从左边读这行内层语句。Console 是本课程使用的屏幕助手。WriteLine 表示写出这些内容,然后结束这一行。圆括号里的部分就是被写出的内容。在圆括号里,词 pine 夹在双引号之间。引号把 pine 标成文本。它们不是文本的一部分。在脑中去掉引号,剩下的词就是 pine,而这就是整个屏幕。把引号留在文件里。没有引号,编译器不会把 pine 当成那个文本字面量。末尾的分号为 C# 结束这条语句。你不会在屏幕上看到分号。你看到 pine,然后行结束,因为 WriteLine 结束了它。

这里单独给出那条写出行,免得其他行把它挡住。

only this line writes the screen

csharp
Console.WriteLine("pine");

dotnet run 命令里没有任何东西选择词 pine。命令只是启动项目。词来自引号。若引号里是另一个词,屏幕就会显示那个词,而本页不会那样做。本页引号里装的是 pine,所以屏幕是 pine。一行。没有第二行。屏幕上没有引号。没有词 Main。没有词 Pine。

📊 Which line the screen shows

这一行 屏幕
using System; 这一行什么也不出
public class Pine 这一行什么也不出
public static void Main() 这一行什么也不出
Console.WriteLine("pine") pine

人们常读错什么

常见失误是从上往下读文件,并假定最眼熟的词就是输出。Main 看起来很重要,它也确实重要,因为没有它 runtime 不会启动这种形状。重要不等于输出。你可以用手指盖住 Main 行,写出行仍是 Console.WriteLine("pine");。你不能盖住写出行还解释得了屏幕。另一种失误是:因为类名叫 Pine,就说屏幕显示 Pine。屏幕用的是引号之间的词,而那个词用小写 p 拼写。第三种失误是数行。文件显示好几行和好几对花括号。屏幕只显示一行。花括号、词 public 与 static 与 void、名字 Main、名字 Pine,以及 using System;,在运行之后仍留在文件里。运行不会删掉它们。也不会打印它们。

屏幕来自一行

你可以把手指放在 Console.WriteLine("pine"); 上,说屏幕来自这一行。你可以把手指放在 public static void Main() 上,说 runtime 从那里开始,而词 Main 不在屏幕上。你可以把手指放在 public class Pine 上,说这个名字与教学类型一致,与屏幕不一致。下一页会在文件里放一条备注。备注是给读文件的人看的。屏幕仍会是 pine,因为备注不是第二条 WriteLine。
练习 C# 写出行时,把残留的 Java System.out.println("mint") 习惯留在本页之外。把臆造 ASP.NET 路由留在本页之外。把把 dotnet --version 当成屏幕上的词也留在本页之外——版本行是安装证明,不是本程序的输出。当你能说出写出行,并拒绝来自 Main 和 Pine 的错误猜测时,First Program 就完成了任务;若继续学,你已准备好进入 C# Comments。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
6
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部