网站首页 > 教程文章 正文
学习笔记之C#基础——变量与常量
变量本身被用来存储特定类型的数据,可以根据需要随时改变变量中所存储的数据值。变量具有名称、类型和值。变量名是变量在程序源代码中的标识。变量类型确定它所代表的内存的大小和类型,变量值是指它所代表的内存块中的数据。在程序的执行过程中,变量的值可以发生变化。使用变量之前必须先声明变量,即指定变量的类型和名称。
声明变量
C#声明变量是由一个数据类型和后面跟一个或多个变量名组成。
<data_type> <variable_list>;
例如:
int a,b,c; char ch; float f;
变量的初始化(赋值)
C#中使用“="符号来进行赋值,将等号右边的值赋值给左边的变量。
变量可以在声明的同时初始化,例如:
int a=3; float f=3.1;
变量也可以在声明之后再赋值,例如:
int b,c; b=5; c=b;
变量的作用域
C#变量一般分为”成员变量“和”局部变量“。”成员变量“是在类中声明的,可以供整个类访问。局部变量在方法体类声明的变量,只在方法内部可以访问。作用域如下图所示:
成员变量又分为实例变量和静态变量。静态变量在声明时在变量类型前加上static。静态变量的有效范围可以跨类,甚至可达到整个应用程序之内。对于静态变量,除了能在定义它的类内存取,还能直接以“类名.静态变量”的方式在其他类内使用。
class oneclass { int a; //实例变量 static float b; //静态变量 }
数据类型
C#中的变量类型根据其定义可以分为两种:一种是值类型;另一种是引用类型。这两种类型的差异在于数据的存储方式,值类型的变量本身直接存储数据。而引用类型则存储实际数据的引用,程序通过此引用找到真正的数据。
值类型变量主要包含整数类型、浮点类型以及布尔类型等。值类型变量在栈中进行分配。值类型是从System.ValueType类继承而来的类型。
- 整数类型:
- 浮点类型:
- 布尔类型:布尔类型主要用来表示true和false值,一个布尔类型的变量,其值只能是true或者false。
引用类型是构建C#应用程序的主要对象类型数据。在应用程序执行的过程中,预先定义的对象类型以new创建对象实例,并且存储在堆中。堆是一种由系统弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性地运用于对象的访问。多个引用类型变量可以引用同一对象,这种情形下,对一个变量的操作会影响另一个变量所引用的同一对象。
class oneclass
{
class Childclass
{
public int val=0;
}
static void Main(string[] args)
{
int a=0;
int b=a;
b=110;
Childclass cc1=new Childclass();
Childclass cc2=cc1;
cc2.val=119;
Console.WriteLine("Values:{0},{1}",a,b);
Console.WriteLine("Ref:{0},{1}",cc1.val,cc2.val);
Console.ReadLine();
}
}
运行的结果如下:
由上面的例子可以看出,声明cc2时将cc1赋值给了cc2,后面修改cc2.val的值为119,最后输出cc1.val和cc2.val都是119。这里cc1.val跟着cc2.val变化了。原因就是,引用类型包含的是堆上的数据区域地址的引用,所以在声明cc2并将cc1赋值给它(Childclass cc2=cc1),此时是将cc1的引用给了cc2,也就是cc1和cc2同时指向了堆上的同一数据区域地址,所以不论修改cc1还是cc2,其实都是修改的同一个数据地址的值,从而另一个的值也跟着变化了。
枚举类型是一种独特的值类型,它用于声明一组具有相同性质的常量。
enum week
{
Sun=0,
Mon=1,
Tue=2,
Wed=3,
Thu=4,
Fri=5,
Sat=6
}
类型转换
类型转换就是将一种类型转换成另一种类型,转换可以是隐式转换,也可以是显式转换。
隐式转换就是不需要声明就能进行的转换。
可以进行隐式转换的数据类型表如下:
显式转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要把高精度的变量的值赋给低精度的变量,就需要使用显式转换。
装箱和拆箱
将值类型转换为引用类型的过程叫作装箱,相反,将引用类型转换为值类型的过程叫作拆箱。
static void Main(string[] args)
{
int a = 101;
Object b = a;//装箱操作
Console.WriteLine("值变量a:{0},装箱后对象b:{1}", a, b);
a = 111;
Console.WriteLine("值变量修改后a:{0},此时对象b:{1}", a, b);
Console.ReadLine();
}
运行结果:
运行结果可以看出,值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,并不会影响装箱对象的值。
class Program
{
static void Main(string[] args)
{
int a = 101;
Object b = a;//装箱操作
Console.WriteLine("装箱操作:值变量a:{0},装箱后对象b:{1}", a, b);
int c = (int)b;
Console.WriteLine("拆箱操作:装箱后对象b:{0},拆箱到值变量c:{1}", b, c);
Console.ReadLine();
}
}
运行结果:
运行结果,不难看出,拆箱后得到的值类型数据的值与装箱对象相等。需要读者注意的是,在执行拆箱操作时要符合类型一致的原则,否则会出现异常。
常量
常量就是其值固定不变的量,而且常量的值在编译时就已经确定了。常量的类型只能为下列类型之一:sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string等。C#中使用关键字const定义常量,并且在创建常量时必须设置它的初始值。
const double pi = 3.1415;
const char ch = 'a';
- 上一篇: C# 入门深度学习:万字长文讲解微积分和梯度下降
- 下一篇: 运算符 - C#入门教程
猜你喜欢
- 2024-12-04 C#最常用的语法和方法(备用查询)
- 2024-12-04 C# 高级编程——委托
- 2024-12-04 运算符 - C#入门教程
- 2024-12-04 C# 入门深度学习:万字长文讲解微积分和梯度下降
- 2024-12-04 如何使用 C# 扩展方法
- 2024-12-04 9.C#关系运算符与逻辑运算符
- 2024-12-04 一个“txt文档”,就可以偷光你的秘密
- 2024-12-04 C#之委托
- 2024-12-04 C#+web=?微软Blazor
- 2024-12-04 C#将窗口置于桌面下方实现动态桌面秀
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)