Main函數
程序的入口点
每一个C#程序都必须包含一个类,该类中拥有名为Main的方法。在前文展示的示例中,这个方法定义在名为Program的类里。
不过现在新版的C#,可以不用写Main函数,默认就是Main函数的函数体。
- C#程序的执行起点是
Main方法内的第一条代码指令。 - 方法名
Main首字母必须大写。
Main方法最简写法:
static void Main( )
{
代码语句
}Code language: C# (cs)
Main函数多个也不行,没有也不行,就只能一个。
为了给大家演示,我们这里使用VS2022创建.NET Framework项目。单支持windows版本的。

读者选择下面的这个控制台项目。

版本这里,我们选择最新的.NET 4.8.1的版本。
默认我们的Program.cs的内容如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloDemo
{
internal class Program
{
static void Main(string[] args)
{
}
}
}
Code language: C# (cs)
前面是引入多个命名空间,我们可以使用这些命名空间提供的类。这些都是.NET内置的类。
我们在Main函数中输入一句代码:
Console.WriteLine(“hello foxdevelop.com”);

点击VS上面的绿色三角形 Start 运行程序。

程序会默认执行Main中的第一句代码。
下面我们复制一个Main出来,立马报错

原因是“同一个命名空间”下面不能有相同的函数。那么我们创建两个不同的命名空间。

现在正常,没有红色的波浪线了,但是我们去编译
点击Start

编译报错了,并且底部的error list 窗口显示错误

如果读者没有显示这个Error List 窗口,可以到菜单栏中把它显示出来。

错误list窗口中,会告诉我们那个地方出错了

空白字符(Whitespace)
代码中的空白字符指不会产生可见输出的字符。编译器会忽略源代码里的空白字符,开发者使用空白字符是为了让代码结构清晰、便于阅读。
常见空白字符包含:
- 空格(Space)
- 制表符(Tab)
- 换行符(New line)
- 回车符(Carriage return)
示例:下面两段代码视觉格式完全不同,但编译器会做等同处理
// 排版工整版本
Main()
{
Console.WriteLine("Hi, there!");
}
// 紧凑连写版本
Main(){Console.WriteLine("Hi, there!");}Code language: C# (cs)
如下是一个正常的Main函数
static void Main(string[] args)
{
Console.WriteLine("hello foxdevelop.com");
}Code language: C# (cs)
如下是我们把它的空白部分去掉,变得很拥挤后,程序一样可以正常编译,对于编译器来说没区别。
static void Main(string[] args){Console.WriteLine("hello foxdevelop.com");}Code language: C# (cs)

语句(Statements)
C#的语句和C、C++语法相似。本节介绍语句通用格式,各类细分语句将在后面讲解。
语句是一行源码指令,用于定义数据类型,或是命令程序执行某一项操作。
简单语句必须以分号 ; 结尾。如下两段连续简单语句:第一条定义整型变量var1并赋值5;第二条将变量值打印至控制台窗口。
int var1 = 5;
System.Console.WriteLine("The value of var1 is {0},wellcome to foxdevelop.com", var1);Code language: C# (cs)

以上的Main函数中有两条语句,我们前面都一直是一条语句。上面代码先定义一个var1的变量,是整型来,存储一个5的值进去,然后第二句代码是打印一行文本到控制台中,文本中有一个{0},这是一个占位符,会把后面的var1填充进去。
代码块(Blocks)
代码块由一对匹配大括号包裹零条或多条语句组成,在语法层面整体视作单条语句。
将上例两条语句放入一对大括号,即可构成代码块:
{
int var1 = 5;
System.Console.WriteLine("The value of var1 is {0},wellcome to foxdevelop.com", var1);
}Code language: C# (cs)

代码块核心规则:
- 当语法要求只写一条语句,但业务需要多条操作时,用代码块包裹所有语句。
- 部分语法结构强制要求使用代码块,不能用单条语句替代。
- 简单语句末尾需要分号,但代码块结尾不加分号。(编译器允许在
}后写分号,会被识别为空语句,但属于不规范写法)
图示说明:
{
int var2 = 5; // 语句末尾带结束分号
System.Console.WriteLine("The value of var1 is {0}", var1); // 语句末尾带结束分号
} // 大括号末尾无结束分号Code language: C# (cs)

我们正常的语句中,末尾的;

如下是完整例子,读者可以拷贝运行
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloDemo
{
internal class Program
{
static void Main(string[] args)
{
{
int var1 = 5;
System.Console.WriteLine("The value of var1 is {0},wellcome to foxdevelop.com", var1);
}; ; ; ;
}
}
}
Code language: C# (cs)