.NET/C#基础之程序的结构、命名空间、程序集和运行

175 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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.IOSystem.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,分别表示是一个程序还是一个库。

参考

A tour of the C# language