网站首页 > 技术文章 正文
学习笔记之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';
猜你喜欢
- 2024-11-12 C#-练习题 014(c#程序题及答案)
- 2024-11-12 C# 类型转换(c类型转换有哪三种形式)
- 2024-11-12 C#-无参数有返回值的方法 060(有参无返回值 c语言)
- 2024-11-12 C#中的值类型和引用类型(c# 引用类型)
- 2024-11-12 abelkhan中的rpc框架(rpc框架应用场景)
- 2024-11-12 C#编程零基础到入门学习-C# 值类型和引用类型(4-8)
- 2024-11-12 2.6 C#的常用关键字和预定义类型(c#预留关键字)
- 2024-11-12 C#_图片拖拽(c#窗体图片移动)
- 2024-11-12 数据类型 - C#入门教程(c#常见数据类型)
- 2024-11-12 C#中堆栈(Stack)和堆(Heap)的区别——第一部分
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)