C#标识符和关键字

本文将学习两个重要的基本概念:标识符和关键字。

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();
        }
    }
}

先来看看这段代码都有些什么?

  1. 命名空间:ProgrammingCSharp4

  2. 类:IdentifierSample

  3. 类的函数成员:Main()

  4. Main()函数中的两个字符串变量:questionMessageyourName

在本文中,我们重点关注的是如下几个字符串:ProgrammingCSharp4IdentifierSampleMain以及questionMessageyourName,它们都是标识符。标识符是一种特定的字符串,用于对诸如命名空间、类、方法、局部变量以及参数元素等进行命名。这里的"特定"意味着并非所有的字符串都有资格成为标识符。要作为一个标识符,一个字符串必须满足如下条件:

  1. 只能为字母(包括大小写)、数字、@符号以及下划线_

  2. 数字不能放在首位,但下划线可以。

  3. 字符@只能放在首位,不能放在任何其他位置。

C#是一种大小写敏感的语言,即使是相同的2个字符串,只是大小写不同,也是2个不同的标识符。例如,myVarMyVar是两个不同的标识符。定义或者选择标识符的一条最佳实践是:标识符应该尽可能有意义,并且具有一定的自描述性。换句话说,就是从标识符的字面含义就可以了解该标识符所代表元素的作用。例如,虽然PersonMyVar都是合法的标识符,但前者较后者好,因为前者表达出了它所代表的意义,这对于提高代码的可读性十分有益。无论是一个人还是一个团队,无论是一个小型项目还是一个大型项目,养成良好的编程习惯都是非常有益处的。它使代码的维护、纠错更加容易,也让接手你的代码的人更容易理解你的代码。

我们已经知道了什么是标识符,以及一个合法标识符所要遵守的原则。那么,是不是就意味着,只要不违反上述原则,就可以使用任意的字符串做标识符呢?答案是否定的,C#中还有这样一些字符串,它只限于语言本身使用,这些被C#保留的字符就叫做关键字,又名保留字。

2. 关键字

C#共有77个关键字,如表3-1所示。原则上,关键字不可以用做标识符,但有一种情况例外,加上前导字符@就可以用作标识符了,例如:@abstract@bool@break等都是合法的标识符,但我们不推荐这样做。

这些关键字中,有些是用于类型声明的,比如abstractstaticclass等;有些是C#语言本身的数据类型,比如boolchardecimaldouble等,这些数据类型对应于CTS中的类型;有些是负责程序流程控制的,比如ifelseswitch等;还有一些是常数值,比如truefalse等。在后面的章节中,将会对上述各关键字的用法和使用场合逐一详细讲解。

另外,还有一些标识符仅在某些上下文中才是关键字,称为"上下文关键字",这类关键字在其他时候不是关键字。上下文关键字的意义在于它能让语法更加简洁。其中,partialwhere在多个不同的场合都具有特殊的含义,如表3-2所示。

举例说明,如代码清单3-2所示,第7行的Age是类IdentifierSample的一个属性(Property),它有两个访问器:settergetter,分别提供对Age执行赋值和取值的功能,其中第9行和第10行就用到了getset这两个上下文关键字。

代码清单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. 标识符的命名约定

除了遵守标识符的命名原则以外,为了提高代码可读性,一般会使用一个命名约定来规范标识符的使用,但这里只是向大家推荐一种命名约定,不同的组织和机构可能有自己的命名约定。为了让标识符更加可读(即可以自我描述),经常会遇到一个标识符使用了多个单词的情况。根据标识符的用途,有两种常用的命名约定:

  1. Pascal风格

  2. Camel风格

关于这两种风格的详细介绍和示例如表3-3所示。

4. 小结

本章介绍了两个重要的概念:标识符和关键字,并介绍了标识符的命名约定,了解了一个合法的标识符所应该遵守的规则。尤其需要注意的是,在定义标识符时,要尽量避免使用C#的关键字,尤其不推荐使用@符号作为前导符使用关键字作为标识符的方式。

相关推荐
武昌库里写JAVA31 分钟前
39.剖析无处不在的数据结构
java·vue.js·spring boot·课程设计·宠物管理
Nelson_hehe3 小时前
Java基础第四章、面向对象
java·语法基础·面向对象程序设计
Thomas_YXQ3 小时前
Unity3D Lua集成技术指南
java·开发语言·驱动开发·junit·全文检索·lua·unity3d
ShiinaMashirol4 小时前
代码随想录打卡|Day27(合并区间、单调递增的数字、监控二叉树)
java·算法
程序设计实验室5 小时前
一次小而美的重构:使用 C# 在 Avalonia 中生成真正好看的词云
c#
东阳马生架构5 小时前
Nacos简介—3.Nacos的配置简介
java
北极的企鹅886 小时前
XML内容解析成实体类
xml·java·开发语言
oioihoii6 小时前
C++23 中 static_assert 和 if constexpr 的窄化布尔转换
java·jvm·c++23
聂 可 以6 小时前
调整IntelliJ IDEA当前文件所在目录(包路径)的显示位置
java·ide·intellij-idea
电商api接口开发6 小时前
ASP.NET MVC 入门指南二
前端·c#·html·mvc