C#基础之标识符、命名规范及变量常量静态变量

478 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

标识符(identifier)

标识符(identifier)是用来识别各种值的合法名称,比如一个变量名、函数名、类名等。通常它们都有着一定的规则。

大多数语言对于标识符命名的要求基本都差不太多,比如

  1. 不能以数字开头。
  2. 由标准字符组成,字母、数字、下划线,支持Unicode字符的编程语言也都允许汉字、其他语言的字母等非ASCII字符,比如Python、C#支持utf8格式的中文字符作为变量名,当然,不推荐这么使用。

比如C#中使用中文变量名:

string 变量1 = "我是中文变量名";
Console.WriteLine(变量1);

此外,像JavaScript等编程语言,还支持使用特殊字符作为变量名,如$,单独记住即可,其他地方很少使用。

  1. 大小写敏感,绝大多数编程语言的标识符都是大小写敏感的
  2. 语言本身的关键字不能作为变量名。

关键字是编程语言保留的用于特定用途或表示特定结构的字符,比如class表示定义一个类,int表示整型等。

关键字(key word)也被称为保留字(reserved word).

C#中支持以@作为前缀使用关键字作为变量名。

string @int = "你好";
int @string = 10;

在与其他语言交互时,使用保留字作为标识符很有用。【这句来自官网 learn.microsoft.com/en-us/dotne… 虽然不知道其具体实用意义是什么。】

  1. 同一作用域内,不能再定义同名的变量。(同一个变量名不能重复定义)

命名规范

常见的命名规范有驼峰式命名法、帕斯卡命名法、下划线命名法和匈牙利命名法,全大写命名法(一般表示常量)、下划线开头命名法(表示字段或成员变量)、I/i前缀(一般表示接口的名称)、动宾短语组成方法的名(如Run()print()方法名)等。

所有的命名规范首要的第一要务就是不要进行无意义的命名,即变量名要体现出该变量的含义。比如int age=10;,age就是一个有意义的命名,准确表示了“年龄”这一变量。

驼峰式命名法(Camel,小驼峰命名法)

驼峰式命名法一般指的是小驼峰命名法,要求组成标识符的第一个单词首字母小写,其余单词首字母大写(有高有低,类似于驼峰)。

int myAge;
char myName[10];
float manHeight;

小驼峰命名法常常用来表示类中的字段、成员变量、私有变量、局部变量等。(成员变量或字段使用下划线前缀的也居多)

帕斯卡命名法(Pascal,大驼峰命名法)

帕斯卡命名法,即大驼峰式命名法,与小驼峰命名法的区别是,第一个单词的首字母要大写。

int MyAge;
char MyName[10];
float ManHeight;

大驼峰命名法常常用来表示类名、方法名(函数名)、属性名等。

下划线命名法

下划线命名法也是比较常见的一种,它将组成标识符的各个单词通过下划线分隔开,所有单词基本都是小写。

int my_age;
char my_name[10];
float man_height;

匈牙利命名法(十分系统却又琐碎的命名规范)

匈牙利命名法是早期的规范,由微软的一个匈牙利人发明的,是 IDE 还十分智障的年代的产物。由于当时的IDE没有智能提示、类型提示、快速跳转等功能,代码量非常多的时候,确定一个变量的类型就很麻烦,所以产生了这样的命名规范。

匈牙利命名法规定,前缀字母用小写的变量类型的缩写,其余部分用英文或其缩写,类型后的单词第一个字母大写。

int iMaxNum;        #  "i": int
char cFirstName[10];  #  "c": char
float fManHeight;  #  "f": float
Color crBackgroundColor;  #  "cr": Color Ref

虽然说现在已经不常用匈牙利命名法,但是还是可以了解下,尤其是其常见的类型前缀,非常有意义:

  • a 数组(Array)
  • b 布尔值(Boolean)
  • by 字节(Byte)
  • c 有符号字符(Char)
  • cb 无符号字符(Char Byte,很少用)
  • cr 颜色参考值(Color Ref)
  • cx,cy 坐标差(长度 Short Int)
  • dw 双字(Double Word)
  • fn 函数(Function)
  • h Handle(句柄)
  • i 整形(Int)
  • l 长整型(Long Int)
  • lp 长指针(Long Pointer)
  • m_ 类成员(Class Member)
  • n 短整型(Short Int)
  • np 近程指针(Near Pointer)
  • p 指针(Pointer)
  • s 字符串(String)
  • sz 以 Null 做结尾的字符串型(String with Zero End)
  • w 字(Word)

命名规范的意义

符合规范的统一命名是程序编写的基本要求,通常一个团队内要做到编码风格的统一,规范命名就是最重要的一环。

  • 风格统一,便于代码理解、审查和重构等。
  • 含义清晰,不进行无意义的变量命名,使代码编写一目了然。

变量

变量是用于引用特定类型的实例的标签。【A variable is a label that refers to an instance of a specific type.

变量、变量名、变量的声明和初始化

变量表示一个“值”,它是对“值”的具名引用,变量和它的“值”是等同的。变量名就是变量的名字。

变量就是为“值”起名,引用这个名字,就等同于引用这个值。

比如。下面声明一个变量并赋值,变量名为num,其值为int类型的1:

int num = 1;

= 将数值1赋值给变量num,后面引用(使用)变量名num,就会得到其值1。int是变量的类型。

数据类型加变量名用来声明变量。int num2;(未赋值或未初始化的变量)。

未初始化的变量通常都有一个默认值,不同的数据类型默认值不同。

int num2; // int类型的默认值为0

对应的,方法或函数,就表示可执行的一段代码,它们各自有着方法名或函数名用来执行;类(class)也有类名。

静态变量、局部变量和常量

  • 通过关键字static指定的变量为静态变量

静态变量相对于普通变量(类变量)来说,可以直接应用,而无需创建类的对象。

对于一个变量来说,在类内可以直接使用,如果在类外,则必须通过类的实例进行访问;而静态变量可以直接通过类名引用,而不需要创建对象再引用。(静态方法同理)

静态变量只会创建一次,C#中,静态成员只能通过类名引用,而不能通过实例访问。

class A
{
    public static int K=100;
    public static void StaticMethod(){}
}
A.K = 100; // 通过类名引用静态变量

var a = new A();
// 类的实例不能引用静态成员
//a.K;
//a.StaticMethod();
  • 在一个独立的程序块中声明的变量,只在该范围内有效,因此也叫局部变量

如下,局部变量只能在所属的(块级)作用域内使用。内层作用域的变量可以使用外层的变量。

  • 常量是使用const指定的变量,声明的时候必须初始化,并且常量值不能修改。

常量用来存储固定数值,一旦初始化就不会再改变

常量主要用来表示自然界中的常数、不变的量。比如圆周率π、重力加速度g等。

const double PI = 3.1415926;

参考

感谢编程世界的无私分享!