开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
C#的Hello world
学习编程语言的第一步通常都是“Hello, World”程序。
打开visual studio,新建一个控制台(Console)应用程序,项目名为HelloWorld,创建时先不选择使用顶级语句。
默认会生成一个最简单的“Hello, World”程序,.NET Framework程序可能不会生成Console.WriteLine("Hello, World");这句代码,添加上即可:
using System;
namespace HelloWorld
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World");
}
}
}
使用C# 9中的顶级语句(top level statement)将会更加简单:
Console.WriteLine("Hello, World");
C#程序的结构
C# 程序的组织结构主要包括:程序、命名空间、类型、成员和程序集。
命名空间
上面的“Hello, World”程序,开始第一句使用 using 指令引用 System 命名空间。
命名空间可以组织 C# 程序和库的分层。命名空间包含类型(class类)和其他命名空间。
例如,System 命名空间包含许多类型(程序中引用的 Console 类)和其他许多命名空间(如 System.IO 和 System.Collections)。
通过using引用给定的命名空间,可以直接使用该命名空间中的类型(这称为非限定的方式)。即使用 Console.WriteLine 的形式作为 System.Console.WriteLine(完全限定的方式) 的简写。
当前项目的命名空间默认就是创建程序时的程序名。命名空间是一个程序的组织形式,可以屏蔽内部的细节,只使用其中暴露出来可供使用的类及类提供的方法即可。
class Program是程序命名空间中的类,类内包含静态成员方法Main。
C#是面向对象的语言,所以class类是其基本使用形式,命名空间下必须由类和类中的成员构成。
程序的运行
“Hello, World”程序中class Program声明的 Hello 类只有一个成员,即 Main 方法。Main 方法是使用 static 修饰符声明的静态方法。
Main 静态方法是 C# 程序的入口点,所有代码的运行都从此处开始,一个C#程序只能有一个Main静态方法。
但是还可以有Main实例方法。
Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point.
可以看到,如果有多个
Main入口点,必须在编译时通过/main指定使用哪个。编译时通过
/main可以修改入口点程序,而不是约定的Main静态方法。
程序的输出由 System 命名空间中 Console 类的 WriteLine 方法实现。此类由标准类库(standard class libraries - .NETCore或.NET5+)或基础类库(BCL)提供。默认情况下,编译器会自动引用标准类库或基础类库。
从入口Main开始运行,到方法执行完,就代表一个程序运行结束。
程序运行结束后就会退出,并释放所有的程序资源。
所有的桌面、服务器、App程序等能够长久运行,是因为运行开始后都一直处于不断地循环中,以维持程序的状态,直到通过手动或外力(强制)关闭其运行。
程序集
程序(命名空间)内声明类型,类型包含成员。
类Class、结构struct、接口interfaces、枚举enum、委托delegate是不同的类型type。
字段Field、方法method、属性propertie和事件event是不同的成员。
C#程序编译完成,会全部打包到程序集assembly中,程序集Assemblies文件的扩展名通常为 .exe 或 .dll,分别表示是一个程序还是一个库。