Skip to content

03-变量和常量

在 C# 中,变量和常量是程序中存储和使用数据的重要组成部分

变量

定义:变量是用于存储和表示数据值的一种标识符。在 C# 中,变量必须先声明后使用。

类型:变量具有特定的数据类型,例如整数、浮点数、布尔值、字符等。在声明变量时,必须指定其类型。

赋值:变量可以通过赋值操作来存储数据。赋值操作使用等号( = )将数据值分配给变量。

作用域:变量具有作用域,即其可访问的范围。通常,变量的作用域由其声明的位置决定,可以是全局的或局部的。

生命周期:变量的生命周期是指其存在的时间范围。局部变量的生命周期通常在其声明所在的块结束时结束,而全局变量的生命周期则在整个程序运行期间。

变量的本质是代表了一段可操作的内存空间。我们可以将变量视为内存的符号化表示, 当程序需要使用内存时,我们可以定义某种类型的变量。编译器会根据变量的数据类型分配一定大小的内存空间,程序可以通过变量名来访问这些内存

变量声明

声明基础变量

C#
// 声明变量
// 变量声明时需要指定变量的类型
// 变量的类型写在变量的前面个 表示当前变量的数据是什么类型的数据  
int age = 30; // 声明变量并指定变量的初始值 
Console.WriteLine(num); // 在控制台打印一下变量的值

没有初始值的变量

C#
// 变量在声明时也可以不用指定初始数据类型
int num; // 声明的变量是没有初始值的 

// 变量在没有赋值时是无法使用的
// 这句代码会出错 因为使用了没有被赋值的变量 
Console.WriteLine(num); // 在控制台打印一下变量的值

num = 10;
// 此时程序是不会出错的 因为num 已经有了数据 
Console.WriteLine(num); // 在控制台打印一下变量的值

单个声明中的多个变量

C#
// 可以同时声明多个变量
int a = 0,b,c; // 同时声明了三个变量

// 给三个变量分别赋值
a = 0;
b = 0;
c = 0;

var 关键字声明声明

在前面的讲解中,我们知道变量的声明,需要通过类型关键字指定变量的类型。而这里的var 关键字并非数据类型。仅仅只是用来隐士声明变量的一个关键字。但是在c#属于静态类型语言。所谓的静态类型语言就是在编译时需要确定数据的类型。而var关键字并不是数据类型,呢么它的数据类型则需要编译器通过变量的初始值推断出来。

C#
// 程序在编译时 会自动通过后面的数据推断出数据的类型为 int 类型
var a = 10; // 此时变量a 是一个 int 类型的变量 

a =123“; // 这是不正确的。 因为a 是int 类型无法赋值string 类型的数据

// 下面这句代码是错误的
// 变量声明必须要有类型 var 关键字并非数据的类型 此时需要通过初始值来决定变量的类型是什么类型变量。但是并没有给变量指定初始的。
// 所以编译器并不知道变量b 是什么类型 就会报错  
var b;

变量的作用域

变量的作用域是指可以通过名称引用该变量的代码范围。

变量的作用域从它的声明开始,到其包含的末尾结束。是由一对大括号({})分隔的代码区域。

超出作用范围

c#
static void Main()
{
	int a = 10;

	if(true) 
	{
		int b = 20;
		Console.WriteLine(a); // 可以使用外部作用域中的变量
		// 代码块的内部可以使用代码块外部的变量
	}

	// 超出了作用范围 
	// 在代码块的外部是无法使用代码块内部的变量 
	Console.WriteLine(b); // 无法使用条件判断内部的变量 

}

上述代码示例中 变量 a 的作用域范围是在 Main 主函数的代码块中,变量 b 的作用域是在条件判断的代码块中。条件判断的代码块存在于主函数的代码块中。我们可以理解条件判断的代码块是主函数代码块的子级作用域,而主函数则是条件判断的父级作用域。呢么就存在一种规则,子级作用域可以使用父级作用域的变量,而父级作用域无法使用子级作用域的变量。

作用域中的变量名称

在同一个作用域中变量名称是不能重名的 。这样做的目的是为了防止通过变量名称获取数据时,获取数据不准确的问题。

C#
static void Main()
{
	int a = 10;

	// 此时这句代码会出错 
	// 因为在相同的作用域中存在两个同名的变量a  这在编程中是不被允许的
	double a = 1.23;

	// 如果我们换一种思路使用 int 来声明 这也是不被允许的
	int a = 20; // 变量a 已经声明过了 不能重复声明变量a

}

如果在不同的作用域中,则变量名称是可以重复的。

C#
static void Main()
{ 
	if(true)
	{
		int a = 10;
	}

	if(true)
	{
		// 可以重复声明变量a  
		// 因为他们处于不同的作用域中 互相独立的作用代码不会互相影响 
		int a = 10;
	}
}

上述的例子是两个互相独立的作用域,它们之间的代码是互相独立的不会影响到彼此的运行。如果作用域是嵌套关系则,变量声明时 需要注意不能和父级作用域中的变量名称冲突。

c#
static void Main()
{ 
	int a = 1;
	if(true)
	{
		// 此时不能声明变量 a 因为在父级作用域中已经存在变量 a 
		// 如果还声明变量 a 则会和父级作用域中的变量名称冲突。 
		int a = 10;
	}
}

常量

定义:常量是一种特殊的变量,其值在程序执行期间保持不变。

声明:在 C# 中,常量通过 const 关键字声明,并且必须在声明时进行初始化,初始化后无法修改。

作用域:常量的作用域与变量类似,可以是全局的或局部的。

命名规则:通常,常量的命名采用大写字母,并使用下划线分隔单词,以提高可读性。

常量和变量一样都是用来存储数据的,但是常量存储的数据是不可变的,而变量存储的数据是可变的。

例如:圆周率Π是一个固定的数值。他就是一个常量

在代码中常量需要在变量的前面加 const​ 关键字

C#
const int a = 10;
// 这里的 const 用来指定声明的是一个常量   而 int 则指定了常量的类型
a = 20; // 这句代码是错误的   因为常量是一个固定的值 是不能修改其内容的

Released under the MIT License.