# C# 语法结构

> 原文： [https://zetcode.com/lang/csharp/lexis/](https://zetcode.com/lang/csharp/lexis/)

像人类语言一样，计算机语言也具有词汇结构。 C# 程序的源代码由令牌组成。 令牌是原子代码元素。 在 C# 中，我们具有注释，变量，字面值，空格，运算符，定界符和关键字。

C# 程序由 Unicode 字符集中的字符组成。

## C# 注释

注释被人类用来阐明源代码。 C# 中有三种类型的注释。 单行注释，多行注释和 XML 注释。 可以将 XML 注释提取到 HTML 文件。

多行注释用`/* */`字符括起来。 单行注释以两个正斜杠开头。

`Program.cs`

```cs
using System;

/*
    This is comments.cs 
    Author: Jan Bodnar 
    ZetCode 2019
*/

namespace Comments
{
    // Program starts here
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("This is Comments program");
        }
    }
}

```

C# 编译器将忽略注释。

```cs
/*
  This is comments.cs 
/*  Author: Jan Bodnar */
  ZetCode 2019
*/

```

注释不能嵌套。 上面的代码无法编译。

## C# 空白字符

C# 中的空格字符用于分隔源文件中的标记。 它还用于提高源代码的可读性。

```cs
int i = 0;

```

在某些地方需要空格。 例如，在`int`关键字和变量名之间。 在其他地方，禁止使用空格。 它们不能出现在变量标识符或语言关键字中。

```cs
int a=1;
int b = 2;
int c  =  3;

```

标记之间放置的空间量与 C# 编译器无关。

## C# 变量

变量是保存值的标识符。 在编程中，我们说我们为变量分配了一个值。 从技术上讲，变量是对存储值的计算机内存的引用。 变量名称可以包含字母数字字符和下划线。 标识符可以以字符或下划线开头。 它可能不能以数字开头。 变量名称区分大小写。 这意味着`Name`，`name`和`NAME`引用了三个不同的变量。 变量名称也不能与语言关键字匹配。 （实际上，如果在关键字前面加上`@`字符，则可以使用关键字作为标识符。但这不是一个好的编程习惯。）

```cs
string name23;
int _col;
Date birth_date;

```

这些是有效的 C# 标识符。

```cs
string 23name;
int %col;
Date birth date;

```

这些是无效的 C# 标识符。

`Program.cs`

```cs
using System;

namespace Identifiers
{
    class Program
    {
        static void Main(string[] args)
        {
            string name = "Robert";
            string Name = "Julia";

            Console.WriteLine(name);
            Console.WriteLine(Name);   
        }
    }
}

```

标识符区分大小写。 `Name`和`name`是两个不同的标识符。 在 Visual Basic（C# 语言的表亲）中，这是不可能的。 用这种语言，变量名不区分大小写。

```cs
$ dotnet run
Robert
Julia

```

这是程序输出。

## C# 字面值

字面值是类型的特定值的字面值表示。 字面值类型包括布尔值，整数，浮点数，字符串，字符和日期。 从技术上讲，字面值将在编译时分配一个值，而变量将在运行时分配。

```cs
int age = 29;
string nationality = "Hungarian";

```

在这里，我们为变量分配了两个字面值。 数字 29 和字符串`"Hungarian"`是字面值。

`Program.cs`

```cs
using System;

namespace Literals
{
    class Program
    {
        static void Main(string[] args)
        {
            bool sng = true;
            string name = "James";
            string job = null;
            double weight = 68.5;
            DateTime born = DateTime.Parse("November 12, 1987");

            Console.WriteLine("His name is {0}", name);

            if (sng) 
            {
                Console.WriteLine("He is single");
            } else
            { 
                Console.WriteLine("He is in a relationship");
            }

            Console.WriteLine("His job is {0}", job);
            Console.WriteLine("He weighs {0} kilograms", weight);
            Console.WriteLine("He was born in {0}", 
                string.Format("{0:yyyy}", born));
        }
    }
}    

```

在上面的示例中，我们有一些字面值。 `bool`字面值可能具有值`true`或`false`。 `"James"`是字符串字面值。 `null`代表任何数据类型的默认值。 数字 23 是`Integer`字面值。 数字 68.5 是浮点字面值。 最后，1987 年 11 月 12 日是日期字面值。

```cs
$ dotnet run
His name is James
He is single
His job is
He weighs 68.5 kilograms
He was born in 1987

```

这是程序的输出。

## C# 运算符

运算符是用于对某个值执行操作的符号。 表达式中使用运算符来描述涉及一个或多个操作数的运算。

```cs
+    -    *    /    %    ^    &    |    !    ~
=    +=   -=   *=   /=   %=    ^=    ++    --
==   !=    <   >    &=  >>=   <<=   >=   <= 
||   &&    >>    <<    ?:

```

这是 C# 运算符的部分列表。 我们将在本教程的后面部分讨论运算符。

## C# 分隔符

分隔符是一个或多个字符的序列，用于指定纯文本或其他数据流中单独的独立区域之间的边界。

```cs
[ ]   ( )   { }   ,   :   ; 

```

```cs
string language = "C#";

```

双精度字符用于标记字符串的开头和结尾。 分号（`;`）字符用于结束每个 C# 语句。

```cs
Console.WriteLine("Today is {0}", DateTime.Today.ToString("M/d"));

```

括号（圆括号）用于标记方法签名。 签名由方法参数组成。 圆括号用于表示求值值。

```cs
int[] array = new int[5] {1, 2, 3, 4, 5};

```

方括号`[]`用于表示数组类型。 它们还用于访问或修改数组元素。 圆括号`{}`也用于初始化数组。 花括号也用于变量插值或包围方法或类的主体。

```cs
int a, b, c;

```

逗号字符可用于在同一行代码上使用多个声明。

## C# 关键字

关键字是 C# 语言中的保留字。 关键字用于在计算机程序中执行特定任务。 例如，定义变量，执行重复性任务或执行逻辑操作。

C# 包含丰富的关键字。 其中许多内容将在本教程中进行解释。 关键字包括`if`，`else`，`for`，`while`，`base`，`false`，`float`，`catch`，`this`等。

`Program.cs`

```cs
using System;

namespace Keywords
{
    class Program
    {
        static void Main(string[] args)
        {
            int i;

            for(i = 0; i<= 5; i++)
            {
                Console.WriteLine(i);
            }
        }
    }
}

```

在上面的示例中，我们使用了几个关键字。 `using`，`public`，`static`，`void`，`int`和`for`是 C# 关键字。

## C# 约定

约定是程序员在编写源代码时遵循的最佳实践。 每种语言可以有自己的约定集。 约定不是严格的规则； 它们只是编写高质量代码的建议。 我们提到了许多 C# 程序员都认可的一些约定。 （并且通常也被其他程序员使用）。

*   类，接口和枚举以大写字母开头。
*   接口名称以 I 字母开头。
*   注释放在单独的行中，而不是在代码行的末尾。
*   方法名称以大写字母开头。
*   每行仅放置一个语句或声明。
*   标识符易于阅读且有意义。
*   标识符使用 Pascal 大小写编写，例如随后的每个单词都以大写字母开头。
*   同时使用`public`关键字和`static`关键字之前。
*   `Main()`方法的参数名称称为`args`。
*   常量以大写形式编写。
*   代码块中的大括号从新行开始。

在 C# 教程的这一部分中，我们介绍了 C# 语言的基本词汇。