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#的关键字,尤其不推荐使用@符号作为前导符使用关键字作为标识符的方式。

相关推荐
考虑考虑3 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261353 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊4 小时前
Java学习第22天 - 云原生与容器化
java
渣哥6 小时前
原来 Java 里线程安全集合有这么多种
java
间彧6 小时前
Spring Boot集成Spring Security完整指南
java
间彧6 小时前
Spring Secutiy基本原理及工作流程
java
Java水解7 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆9 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学10 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole10 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端