变量的基本概念
变量自己被用来存储特定范例的数据,可以根据需要随时改变变量中所存储的数据值
变量具著名称、范例和值
变量名是变量在程序源代码中的标识
变量范例确定它所代表的内存的大小和范例
变量值是指它所代表的内存块中的数据
在程序执行过程中,变量的值可以发生变革
变量使用之前需要先声明变量,即指定变量的范例和名称
变量的声明及赋值
变量在使用之前,必须进行声明并赋值
声明变量
变量的使用是程序设计中一个非常重要的环节
为什么要声明变量呢?简而言之,就是告诉编译器这个变量是属于哪一种数据范例,这样子编译器才知道需要分配多少内存空间给它,以及能存放什么样的数据
在程序运行过程中,空间内的值是变革的,这个内存空间就称为变量
声明变量就是指定变量的名称和范例,变量的声明非常重要,未经声明的变量自己并不合法,也因此没有办法在程序中使用
在C#中,声明一个变量是由一个范例和跟在后面的一个或多个变量名组成的,多个变量之间用逗号分开,声明变量以分号结束声明变量时,还可以初始化变量,即在每个变量名后面加上给变量赋初值的指令- 类型 变量名_1 = 变量值_1, 变量名_2 = 变量值_2, 变量名_3 = 变量值_3;
复制代码 在声明变量时,要注意变量名的定名规则
C#的变量名是一种标识符,应该符合标识符的定名规范
变量名是区分大小写的
下面列出变量的定名规则:
- 变量名只能由数字、字母和下划线组成
- 变量名的第一个符号只能是字母和下划线,不能是数字
- 不能使用关键字作为变量名
- 一旦在一个语句块中界说了一个变量名,那么在变量的作用域内都不能再界说同名的变量
在C#中答应使用汉字或其他语言笔墨作为变量名,在程序运行中是不会出现错误的,但是尽量是避免使用笔墨作为变量名
变量赋值
在C#中,使用赋值运算符=来给变量赋值,将赋值运算符右边的值赋给左边的变量
在对多个同范例的变量赋同一个值时,为了节省代码行数,可以同时对多个变量进行初始化
变量的作用域
由于变量被界说出来后只是暂存在内存中,等到程序执行到某一个节点后,该变量会被释放掉,也就是说变量有它的生命周期
变量的作用域是指程序源代码能够访问该变量的地区,若超出该地区,则在编译时会出现错误
在程序中,一般会根据变量的“有效范围”将变量分为“成员变量”和“局部变量”
成员变量
在类体中界说的变量称为成员变量
成员变量在整个类中都有效
类的成员变量在整个类中都有效
类的成员变量又可分为两种:静态变量和实例变量
假如在成员变量的范例前面加上关键字static这样的成员变量称为静态变量
静态变量的有效范围可以跨类,甚至可达到整个应用程序之内
对于静态变量,除了能在界说它的类内存取,还能直接以“类名.静态变量”的方式在其他类内使用
局部变量
在类的方法体中界说的变量称为局部变量
局部变量只在当前代码块中有效
在类的方法中声明的变量,包括方法的参数,都属于局部变量
局部变量只有在当前界说的方法内有效,不能用于类的其他方法中
局部变量的生命周期取决于方法,当方法被调用时,C#编译器为方法中的局部变量分配内存空间,当该方法调用结束后,则会释放方法中局部变量占用的内存空间,局部变量也将会销毁
数据范例
C#中的变量范例根据其界说可以分为两种:一种是值范例;别的一种是引用范例
这两种范例的差别在于数据的存储方式
值范例的变量自己直接存储数据
引用范例则存储实际数据的引用,程序通过此引用找到真正的数据
值范例
值范例变量直接存储其数据值,重要包罗整数范例、浮点范例以及布尔范例等
值范例变量在栈中进行分配,因此服从很高,使用值范例重要目的是为了提高性能
值范例具有以下特性:
- 值范例变量都存储在栈中
- 访问值范例变量时,一般都是直接访问其实例
- 每个值范例变量都有自己的数据副本,因此对一个值范例变量的操作不会影响其他变量
- 复制值范例变量时,复制的是变量的值,而不是变量的地址
- 值范例变量不能为null,必须具有一个确定的值
值范例是从System.ValueType类继续而来的范例
整数范例
整数范例用来存储整数数值,即没有小数部门的数值
可以是正数,可以是负数,还可以是0
整型数据在C#中有3种表现形式:十进制、八进制以及十六进制
- 十进制:123,456
- 八进制:0123(转换为十进制为83)
- 十六进制:0x25(转换为十进制为37),0Xb01e(转换为十进制为45086)
不能以0作为十进制的开头(0除外)
八进制必须以0开头
十六进制必须以0X或0x开头
C#内置的整数范例范例说明(8位等于1个字节)范围sbyte8位有符号整数-128~127short16位有符号整数-32768~32767int32位有符号整数-2147483648~2147483647long64位有符号整数-9223372036854775808~9223372036854775807byte8位无符号整数0~255ushort16位无符号整数0~65535uint32位无符号整数0~4294967295ulong64位无符号整数0~18446744073709551615byte范例以及short范例是范围比较小的整数
假如正整数的范围没有凌驾65535,声明为ushort范例即可,更小的数值直接以byte范例处置处罚
浮点范例
浮点范例变量重要用于处置处罚含有小数的数值数据,浮点范例重要包罗float和double两种数值范例
浮点范例及描述范例说明范围float精确到7位数±1.5 * 10-45 ~ ±3.4 * 1038double精确到15~16位数±5.0 * 10-324 ~ ±1.7 * 10308假如不做任何设置,包罗小数点的数值都被认为是double范例
假如要将小数数值以float范例来处置处罚,就应该逼迫使用f或者F将其指定为float范例
假如要将数值逼迫指定为double范例,则应该使用d或者D进行设置,但加不加d或者D没有硬性规定,可以加也可以不加
假如需要使用float范例变量时,必须在数值的后面跟随f或者F,否则编译器会直接将其作为double范例处置处罚,也可以在double范例的值前面加上(float),对其进行逼迫转换
布尔范例
布尔范例重要用来表现true和false值,一个布尔范例的变量,其值只能是true或者false,不能将其他的值指定给布尔范例变量,布尔范例变量不能与其他范例之间进行转换
布尔范例通常被用在流程控制中作为判断条件
在界说全局变量时,假如没有特定的要求不消对其进行初始化,整数范例和浮点范例的默认初始化为0,布尔范例的初始化为false
引用范例
引用范例是构建C#应用程序的重要对象范例数据
在应用程序执行过程中,预先界说的对象范例以new创建对象实例,并且存储在堆中
堆是一种由系统弹性设置的内存空间,没有特定大小及存活时间,因此可以被弹性的运用于对象的访问
引用范例具有如下特性:
- 必须在托管堆中为引用范例变量分配内存
- 使用new关键字来创建引用范例变量
- 在托管堆中分配的每个对象都有与之相关联的附件成员,这些成员必须初始化
- 引用范例变量可以引用同一个对象,在这种情况下,对一个变量的操作会影响另一个变量所引用的同一个对象
- 引用范例被赋值前的值都是null
所有被称作“类”的都是引用范例,重要包括类、接口、数组和委托
值范例和引用范例的区别
值范例直接存储其值,而引用范例储存对其值的引用
值范例是在栈中操作,而引用范例是在堆中分配存储单元,可以根据程序的运行情况动态的分配内存大小
栈在编译时就分配好内存空间,在代码中又栈的明确界说,而堆是程序运行中动态分配的内存空间,可以根据程序的运行情况动态的分配内存的大小
值范例总是在内存中占用一个预界说的字节数
引用范例的变量则在堆中分配一个内存空间,这个内存空间包罗的是对另一个内存位置的引用,这个位置是托管堆中的一个地址,即存放此变量实际值的地方
C#的所有值范例均隐式派生自System.ValueType,而System.ValueType直接派生于System.Object
即System.ValueType自己是一个类范例,而不是值范例,其关键在于ValueType重写了Equals()方法,从而对值范例按照实例的值来比较,而不是引用地址来比较
枚举范例
枚举范例是一种独特的值范例,用于声明一组具有相同性质的常量
使用枚举范例可以增加程序的可读性和可维护性,同时,枚举范例可以避免范例错误
在界说枚举范例时,假如不对其进行赋值,默认情况下,第一个枚举变量的值为0,后面每个枚举变量的值依次递增1
在C#中使用关键字enum类声明枚举- enum 枚举名
- {
- list1 = value1,
- list2 = value2,
- list3 = value3,
- ...
- listN = valueN,
- }
复制代码 范例转换
范例转换就是将一种范例转换为另一种范例,转换可以是隐式转换,也可以是表现转换
隐式转换
所谓隐式转换就是不需要声明就能进行的转换
进行隐式转换时,编辑器不需要进行检查就能自动进行转换
隐式范例转换表源范例目标范例sbyteshort、int、long、float、double、decimalbyteshort、ushort、int、uint、long、ulong、float、double 或 decimalshortint、long、float、double 或 decimalushortint、uint、long、ulong、float、double 或 decimalintlong、float、double 或 decimaluintlong、ulong、float、double 或 decimalcharushort、int、uint、long、ulong、float、double 或 decimalfloatdoubleulongfloat、double 或 decimallongfloat、double 或 decimal从int、uint、long或ulong到float,以及从long或ulong到double的转换大概导致精度损失,但是不会影响其数目级
其他的隐式转换不会丢失任何信息
当一种范例的值转换为大小相同或更大的另一范例时,则发生扩大转换
当一种范例的值转换为较小的一种范例时,则发生收缩转换
表现转换
表现转换也可以成为逼迫转换,需要在代码中明确的声明要转换的范例
假如要把高精度的变量的值赋给较低精度的变量,就需要使用表现转换
表现范例转换表源范例目标范例sbytebyte、ushort、uint、ulong 或 charbytesbyte 和 charshortsbyte、byte、ushort、uint、ulong 或 charushortsbyte、byte、short 或 charintsbyte、byte、short、ushort、uint、ulong 或 charuintsbyte、byte、short、ushort、int 或 charcharsbyte、byte 或 shortfloatsbyte、byte、short、ushort、int、uint、long、ulong、char 或 decimalulongsbyte、byte、short、ushort、int、uint、long 或 charlongsbyte、byte、short、ushort、int、uint、ulong 或 chardoublesbyte、byte、short、ushort、int、uint、ulong、long、float、char 或 decimaldecimalsbyte、byte、short、ushort、int、uint、ulong、long、float、char 或 double由于表现转换包括所有的隐式转换和表现转换,因此总是可以使用逼迫转换表达式从任何数值范例转换为任何其他的数值范例
也可以通过Convert关键字进行表现范例转换
装箱和拆箱
将值范例转换为引用范例的过程叫做装箱,装箱答应将值范例隐式转换成引用范例
将引用范例转换为值范例的过程叫做拆箱,拆箱答应将引用范例表现转换为值范例
装箱是将一个值范例转换为一个对象范例(object)
拆箱则是将一个对象范例表现转换为一个值范例
对于装箱而言,它是将被装箱的值范例复制一个副原来转换;对于拆箱而言,需要注意范例的兼容性
常量
常量就是其值固定不变的量,而常量的值在编译时,就已经确定了
常量的范例只能为下列范例之一:sbytebyteshortushortintuintlongulongcharfloatdoubledecimalboolstring等
C#使用关键字const来界说常量,并且在创建常量时必须设置它的初始值
常量一旦设置就不答应修改
与变量不同,常量在整个程序中只能被赋值一次
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |