# C# 关键字和标识符

> 原文： [https://www.programiz.com/csharp-programming/keywords-identifiers](https://www.programiz.com/csharp-programming/keywords-identifiers)

#### 在本教程中，我们将学习 C# 编程语言中的关键字（保留字）和标识符。

## C# 关键字

关键字是预定义的保留字集，在程序中具有特殊含义。 关键字的含义不能更改，也不能直接用作程序中的标识符。

例如，

```cs
long mobileNum;
```

在此，`long`是关键字，`mobileNum`是变量（标识符）。`long`在 C# 中具有特殊含义，即，它用于声明`long`类型的变量，并且该函数无法更改。

另外，不能将`long`，`int`，`char`等关键字用作标识符。 因此，我们不能有以下内容：

```cs
long long;
```

C# 总共有 79 个关键字。 所有这些关键字都是小写的。 这是所有 C# 关键字的完整列表。

```cs
abstract	as	base	bool
break	byte	case	catch
char	checked	class	const
continue	decimal	default	delegate
do	double	else	enum
event	explicit	extern	false
finally	fixed	float	for
foreach	goto	if	implicit
in	in (generic modifier)	int	interface
internal	is	lock	long
namespace	new	null	object
operator	out	out (generic modifier)	override
params	private	protected	public
readonly	ref	return	sbyte
sealed	short	sizeof	stackalloc
static	string	struct	switch
this	throw	true	try
typeof	uint	ulong	unchecked
unsafe	ushort	using	using static
void	volatile	while	 
```

尽管关键字是保留字，但是如果将`@`添加为前缀，它们可以用作标识符。 例如，

```cs
int @void;
```

上面的语句将创建类型为`int`的变量`@void`。

* * *

### 上下文关键字

除了常规关键字，C# 还具有 25 个上下文关键字。 上下文关键字在有限的程序上下文中具有特定含义，并且可以用作该上下文之外的标识符。 它们不是 C# 中的保留字。

```cs
add	alias	ascending
async	await	descending
dynamic	from	get
global	group	into
join	let	orderby
partial (type)	partial (method)	remove
select	set	value
var	when (filter condition)	where (generic type constraint)
yield	 
```

如果您想了解每个关键字的功能，建议您访问 [C# 关键字](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/index)（官方 C# 文档）。

* * *

## C# 标识符

标识符是给变量，方法，类等实体的名称。它们是程序中唯一标识元素的令牌。 例如，

```cs
int value;
```

在此，`value`是变量的名称。 因此，它是一个标识符。 除非添加`@`作为前缀，否则保留的关键字不能用作标识符。 例如，

```cs
int break;
```

该语句将在编译时生成错误。

要了解有关变量的更多信息，请访问 [C# 变量](/csharp-programming/variables-primitive-data-types "C# variables")。

* * *

## 命名标识符的规则

*   标识符不能是 C# 关键字。
*   标识符必须以字母，下划线或`@`符号开头。 标识符的其余部分可以包含字母，数字和下划线符号。
*   不允许使用空格。 除字母，数字和下划线外，它都不能有其他符号。
*   标识符区分大小写。 因此，`getName`，`GetName`和`getname`代表 3 个不同的标识符。

以下是一些有效和无效的标识符：

| 标识符 | 备注 |
| --- | --- |
| `number` | 有效 |
| `calculateMarks` | 有效 |
| `hello$` | 无效（包含`$`） |
| `name1` | 有效 |
| `@if` | 有效（关键字前缀为`@`） |
| `if` | 无效（C# 关键字） |
| `My name` | 无效（包含空格） |
| `_hello_hi` | 有效 |

* * *

## 示例：在程序中查找关键字和标识符的列表

为了澄清概念，让我们在 [C# Hello World](/csharp-programming/hello-world "C# Hello World Program") 中编写的程序中找到关键字和标识符的列表。

```cs
using System;
namespace HelloWorld
{
    class Hello
{         
        static void Main(string[] args)
        {
          Console.WriteLine("Hello World!");
        }
    }
}
```

| 关键词 | 标识符 |
| --- | --- |
| `using` | `System` |
| `namespace` | `HelloWorld`（命名空间） |
| `class` | `Hello`（类） |
| `static` | `Main`（方法） |
| `void` | `args` |
| `string` | `Console` |
|   | `WriteLine` |

`WriteLine`方法内的`"Hello World!"`是字符串字面值。