本文将学习两个重要的基本概念:标识符和关键字。
1. 标识符
我们继续秉承"从实践中学习"的理念,先来看一段代码,如代码清单3-1所示。
代码清单3-1 标识符
cs
using System;
namespace ProgrammingCSharp4
{
class IdentifierSample
{
static void Main()
{
string questionMessage = "What's your name?";
string yourName;
Console.WriteLine(questionMessage);
yourName = Console.ReadLine();
Console.WriteLine("Your name is {0}", yourName);
Console.ReadKey();
}
}
}
先来看看这段代码都有些什么?
-
命名空间:
ProgrammingCSharp4
-
类:
IdentifierSample
-
类的函数成员:
Main()
-
Main()
函数中的两个字符串变量:questionMessage
和yourName
在本文中,我们重点关注的是如下几个字符串:ProgrammingCSharp4
、IdentifierSample
、Main
以及questionMessage
、yourName
,它们都是标识符。标识符是一种特定的字符串,用于对诸如命名空间、类、方法、局部变量以及参数元素等进行命名。这里的"特定"意味着并非所有的字符串都有资格成为标识符。要作为一个标识符,一个字符串必须满足如下条件:
-
只能为字母(包括大小写)、数字、@符号以及下划线
_
。 -
数字不能放在首位,但下划线可以。
-
字符
@
只能放在首位,不能放在任何其他位置。
C#是一种大小写敏感的语言,即使是相同的2个字符串,只是大小写不同,也是2个不同的标识符。例如,myVar
和MyVar
是两个不同的标识符。定义或者选择标识符的一条最佳实践是:标识符应该尽可能有意义,并且具有一定的自描述性。换句话说,就是从标识符的字面含义就可以了解该标识符所代表元素的作用。例如,虽然Person
和MyVar
都是合法的标识符,但前者较后者好,因为前者表达出了它所代表的意义,这对于提高代码的可读性十分有益。无论是一个人还是一个团队,无论是一个小型项目还是一个大型项目,养成良好的编程习惯都是非常有益处的。它使代码的维护、纠错更加容易,也让接手你的代码的人更容易理解你的代码。
我们已经知道了什么是标识符,以及一个合法标识符所要遵守的原则。那么,是不是就意味着,只要不违反上述原则,就可以使用任意的字符串做标识符呢?答案是否定的,C#中还有这样一些字符串,它只限于语言本身使用,这些被C#保留的字符就叫做关键字,又名保留字。
2. 关键字
C#共有77个关键字,如表3-1所示。原则上,关键字不可以用做标识符,但有一种情况例外,加上前导字符@
就可以用作标识符了,例如:@abstract
、@bool
、@break
等都是合法的标识符,但我们不推荐这样做。
这些关键字中,有些是用于类型声明的,比如abstract
、static
、class
等;有些是C#语言本身的数据类型,比如bool
、char
、decimal
、double
等,这些数据类型对应于CTS中的类型;有些是负责程序流程控制的,比如if
、else
、switch
等;还有一些是常数值,比如true
、false
等。在后面的章节中,将会对上述各关键字的用法和使用场合逐一详细讲解。
另外,还有一些标识符仅在某些上下文中才是关键字,称为"上下文关键字",这类关键字在其他时候不是关键字。上下文关键字的意义在于它能让语法更加简洁。其中,partial
和where
在多个不同的场合都具有特殊的含义,如表3-2所示。
举例说明,如代码清单3-2所示,第7行的Age
是类IdentifierSample
的一个属性(Property),它有两个访问器:setter
和getter
,分别提供对Age
执行赋值和取值的功能,其中第9行和第10行就用到了get
和set
这两个上下文关键字。
代码清单3-2 上下文关键字的使用
cs
using System;
namespace ProgrammingCSharp4
{
class IdentifierSample
{
public int Age { get; set; }
static void Main()
{
string questionMessage = "What's your name?";
string yourName;
Console.WriteLine(questionMessage);
yourName = Console.ReadLine();
Console.WriteLine("Your name is {0}", yourName);
Console.ReadKey();
}
}
}
除此以外,C#中还有一些未公开的关键字,例如__arglist
、__reftype
、__makeref
、__refvalue
等。
3. 标识符的命名约定
除了遵守标识符的命名原则以外,为了提高代码可读性,一般会使用一个命名约定来规范标识符的使用,但这里只是向大家推荐一种命名约定,不同的组织和机构可能有自己的命名约定。为了让标识符更加可读(即可以自我描述),经常会遇到一个标识符使用了多个单词的情况。根据标识符的用途,有两种常用的命名约定:
-
Pascal风格
-
Camel风格
关于这两种风格的详细介绍和示例如表3-3所示。
4. 小结
本章介绍了两个重要的概念:标识符和关键字,并介绍了标识符的命名约定,了解了一个合法的标识符所应该遵守的规则。尤其需要注意的是,在定义标识符时,要尽量避免使用C#的关键字,尤其不推荐使用@
符号作为前导符使用关键字作为标识符的方式。