3.模板代码是什么
开篇
namespace ConsoleApp1
{
// 程序主类:C# 要求所有代码必须包在「类」里面,不能裸写
internal class Program
{
// 程序唯一入口 Main方法:程序运行从这一行开始执行
static void Main(string[] args)
{
// 控制台打印输出,在黑窗口里显示文字
Console.WriteLine("Hello World!");
}
}
}
奇奇:村长!写代码不应从零开始写吗?为什么 写C# 上来就是一坨代码?
村长:简单说,这是由 C# 语言的特点决定的。C# 是一门面向对象语言,语法上有严格规定:
你写的所有执行代码,比如
Console.WriteLine("Hello");
不能直接裸写,必须一层一层套在花括号里,外面要加上命名空间、类、Main 方法这三层 “语法壳”,层层嵌套,才能正常运行。
你把它写在语法壳外面,编译器就会报错。
所以编译器一上来就帮我们把这套语法壳写好了,不是故意为难谁,而是C# 本来就必须这么写。
奇奇:那这坨模板代码是什么意思呢?
村长: 搞懂这几行代码,你先记住三句话:
👉 命名空间就是工具箱 👉 类就是工具 👉 方法就是工具的功能
先看结构。
这里一共有三层花括号,这些由花括号包裹起来的代码,叫做代码块。
最外层,是命名空间的代码块 中间层,是类的代码块 最内层,是方法的代码块
虽然都是代码块, 但每一层代码块写的东西,是不一样的。
先看最外层:
这里使用namespace 关键字定义了一个名为 Lesson3 的命名空间。
“命名空间” 这四个字,听上去像高深理论,但它无非就是用花括号把一个或多个class包裹起来,然后再起个名字,形成了一个独立的空间。
在这个独立空间下,你可以定义你自己的class,不用担心和别人定义的class,名字发生冲突。
因为你们属于不同的命名空间。
在这里,class就是类,类可以理解为工具。
所以,命名空间本质上就是一种避免命名冲突的管理类的机制,很像一个工具箱。
再看中间这层:
这里用 class 关键字定义了一个名叫 Program的类。
类,就是你自己定义的“工具”。
一个工具可以有多个功能,所以类里面可以写多个方法。
每个方法相当于一个功能。
这里的Program类,只包裹了一个Main方法,
Main方法的主要功能是启动整个程序。
因此,Program 类就相当于整个程序的启动工具。
class 关键字前面的 internal 关键字可以删掉,以后你会知道它的作用。
最后,看最内层:
这里使用 static void 关键字定义了一个叫 Main 的方法,
方法,就是用来写“具体干什么”的代码块。
方法的典型特征是:方法名的后面必须紧跟一组圆括号,圆括号里的参数,在这里暂时用不到,也可以删掉。
这里的Main 方法是一个特殊的方法,特殊在于它总是程序执行的入口,所以 Main 方法也被称为入口方法。
这意味着,你需要把全部要执行的代码放到 Main 方法的花括号里。
最后,我们删掉全部模板代码,手写一个 Hello World
namespace Lesson3
{
class Program
{
static void Main()
{
Console.WriteLine("Hello World");
Console.WriteLine("写程序,其实就三件事:");
Console.WriteLine("把工具放进工具箱,");
Console.WriteLine("给工具加功能,");
Console.WriteLine("最后让程序跑起来。");
}
}
}
写之前,请注意两点: 1.所有的名字,首字母建议大写;包括:命名空间名、类名和方法名 2.所有名字以外的关键字,都必须小写
好,规则清楚了,我们开始:
首先创建命名空间,输入关键字 namespace,这时突然弹出灰色提示,这是 Copilot 机器人在热情的帮我们写代码,谁知我们竟然不需要。 直接关掉:右上角找到 Copilot 机器人图标,点开下拉菜单,把启用下一个编辑建议和启用 Copilot 补全都取消勾选。 回到代码,输入命名空间名 Lesson3,按住Shift键,输入左花括号,然后回车,它会自动补全右花括号并换行。
接着创建类,输入 class Program,同样按住 Shift 键,输入左花括号,回车,自动补全。
然后写入口方法:static void Main,按住 Shift 键,输入左圆括号、右圆括号,加左花括号,回车。
最后向控制台输出消息:输入 cw 按 Tab 快速补全,在英文引号里写上 Hello World。 这里注意,小技巧:按住 Shift 再敲回车键,可以直接跳转到下一行,
然后,还可以继续输出更多内容。
补充
即使使用新语法顶级语句,看似是裸写,但其实也只是语法糖,编译器帮你把模板代码隐藏了,并不是真的 “裸写代码”。