03-变量和常量
在 C# 中,变量和常量是程序中存储和使用数据的重要组成部分
变量
定义:变量是用于存储和表示数据值的一种标识符。在 C# 中,变量必须先声明后使用。
类型:变量具有特定的数据类型,例如整数、浮点数、布尔值、字符等。在声明变量时,必须指定其类型。
赋值:变量可以通过赋值操作来存储数据。赋值操作使用等号( = )将数据值分配给变量。
作用域:变量具有作用域,即其可访问的范围。通常,变量的作用域由其声明的位置决定,可以是全局的或局部的。
生命周期:变量的生命周期是指其存在的时间范围。局部变量的生命周期通常在其声明所在的块结束时结束,而全局变量的生命周期则在整个程序运行期间。
变量的本质是代表了一段可操作的内存空间。我们可以将变量视为内存的符号化表示, 当程序需要使用内存时,我们可以定义某种类型的变量。编译器会根据变量的数据类型分配一定大小的内存空间,程序可以通过变量名来访问这些内存
变量声明
声明基础变量
// 声明变量
// 变量声明时需要指定变量的类型
// 变量的类型写在变量的前面个 表示当前变量的数据是什么类型的数据
int age = 30; // 声明变量并指定变量的初始值
Console.WriteLine(num); // 在控制台打印一下变量的值
没有初始值的变量
// 变量在声明时也可以不用指定初始数据类型
int num; // 声明的变量是没有初始值的
// 变量在没有赋值时是无法使用的
// 这句代码会出错 因为使用了没有被赋值的变量
Console.WriteLine(num); // 在控制台打印一下变量的值
num = 10;
// 此时程序是不会出错的 因为num 已经有了数据
Console.WriteLine(num); // 在控制台打印一下变量的值
单个声明中的多个变量
// 可以同时声明多个变量
int a = 0,b,c; // 同时声明了三个变量
// 给三个变量分别赋值
a = 0;
b = 0;
c = 0;
var 关键字声明声明
在前面的讲解中,我们知道变量的声明,需要通过类型关键字指定变量的类型。而这里的var 关键字并非数据类型。仅仅只是用来隐士声明变量的一个关键字。但是在c#属于静态类型语言。所谓的静态类型语言就是在编译时需要确定数据的类型。而var关键字并不是数据类型,呢么它的数据类型则需要编译器通过变量的初始值推断出来。
// 程序在编译时 会自动通过后面的数据推断出数据的类型为 int 类型
var a = 10; // 此时变量a 是一个 int 类型的变量
a = ”123“; // 这是不正确的。 因为a 是int 类型无法赋值string 类型的数据
// 下面这句代码是错误的
// 变量声明必须要有类型 var 关键字并非数据的类型 此时需要通过初始值来决定变量的类型是什么类型变量。但是并没有给变量指定初始的。
// 所以编译器并不知道变量b 是什么类型 就会报错
var b;
变量的作用域
变量的作用域是指可以通过名称引用该变量的代码范围。
变量的作用域从它的声明开始,到其包含块的末尾结束。块是由一对大括号({})分隔的代码区域。
超出作用范围
static void Main()
{
int a = 10;
if(true)
{
int b = 20;
Console.WriteLine(a); // 可以使用外部作用域中的变量
// 代码块的内部可以使用代码块外部的变量
}
// 超出了作用范围
// 在代码块的外部是无法使用代码块内部的变量
Console.WriteLine(b); // 无法使用条件判断内部的变量
}
上述代码示例中 变量 a 的作用域范围是在 Main 主函数的代码块中,变量 b 的作用域是在条件判断的代码块中。条件判断的代码块存在于主函数的代码块中。我们可以理解条件判断的代码块是主函数代码块的子级作用域,而主函数则是条件判断的父级作用域。呢么就存在一种规则,子级作用域可以使用父级作用域的变量,而父级作用域无法使用子级作用域的变量。
作用域中的变量名称
在同一个作用域中变量名称是不能重名的 。这样做的目的是为了防止通过变量名称获取数据时,获取数据不准确的问题。
static void Main()
{
int a = 10;
// 此时这句代码会出错
// 因为在相同的作用域中存在两个同名的变量a 这在编程中是不被允许的
double a = 1.23;
// 如果我们换一种思路使用 int 来声明 这也是不被允许的
int a = 20; // 变量a 已经声明过了 不能重复声明变量a
}
如果在不同的作用域中,则变量名称是可以重复的。
static void Main()
{
if(true)
{
int a = 10;
}
if(true)
{
// 可以重复声明变量a
// 因为他们处于不同的作用域中 互相独立的作用代码不会互相影响
int a = 10;
}
}
上述的例子是两个互相独立的作用域,它们之间的代码是互相独立的不会影响到彼此的运行。如果作用域是嵌套关系则,变量声明时 需要注意不能和父级作用域中的变量名称冲突。
static void Main()
{
int a = 1;
if(true)
{
// 此时不能声明变量 a 因为在父级作用域中已经存在变量 a
// 如果还声明变量 a 则会和父级作用域中的变量名称冲突。
int a = 10;
}
}
常量
定义:常量是一种特殊的变量,其值在程序执行期间保持不变。
声明:在 C# 中,常量通过 const 关键字声明,并且必须在声明时进行初始化,初始化后无法修改。
作用域:常量的作用域与变量类似,可以是全局的或局部的。
命名规则:通常,常量的命名采用大写字母,并使用下划线分隔单词,以提高可读性。
常量和变量一样都是用来存储数据的,但是常量存储的数据是不可变的,而变量存储的数据是可变的。
例如:圆周率Π是一个固定的数值。他就是一个常量
在代码中常量需要在变量的前面加 const
关键字
const int a = 10;
// 这里的 const 用来指定声明的是一个常量 而 int 则指定了常量的类型
a = 20; // 这句代码是错误的 因为常量是一个固定的值 是不能修改其内容的