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

相关推荐
yngsqq12 分钟前
寻找最短路径
运维·服务器·windows
不怕报错 就怕不报错的小猿猿16 分钟前
岚图N次方KOC项目复盘总结---记录踩坑日记
java·spring boot·maven
就是蠢啊23 分钟前
封装/前线修饰符/Idea项目结构/package/impore
java·服务器·前端
gs8014023 分钟前
idea java.lang.OutOfMemoryError: GC overhead limit exceeded
java·开发语言
紫云_Zyun35 分钟前
JAVA开发学习Day8
java·开发语言·学习·vue
明明明h1 小时前
策略模式(Stragety Pattern)
设计模式·c#·策略模式
CodeChampion1 小时前
69.基于SpringBoot + Vue实现的前后端分离-家乡特色推荐系统(项目 + 论文PPT)
java·vue.js·spring boot·mysql·elementui·node.js·mybatis
daopuyun1 小时前
C/C++编程安全标准GJB-8114解读——名称、符号与变量使用类
java·c语言·c++
白白白白纸呀1 小时前
C#核心技术---Linq
开发语言·windows·c#·.net·linq
007php0071 小时前
如何恢复依赖的go自定义SDK的GoZero项目
java·数据库·python·microsoft·oracle·golang·php