c#各种变量的总结
c#中要使用变量,必须先声明它们。在使用他们之前必须还要对他们进行初始化,也可以在定义的同时进行初始化。
变量的声明和赋值
1. 最基本的,先声明,后赋值(即初始化)。
int age; age=25;
先声明的int类型的变量age,然后利用=赋值运算符给变量age赋值。
2. 可以同时声明多个类型相同的变量,方法是在类型的后面用逗号分隔变量名。
int xSize ySize;
3. 在声明变量的同时为他们赋值,即把两行代码合并在一起
int age=25;
4. 也可以同时使用2,3两个技巧,同时为多个同类型的变量赋值:
int xSize=4,ySize=5;
xSize和ySize被赋予了不同的值。
注意以下代码:
int xSize,ySize=5;
其结果是ySize被初始化,二xSize仅进行了声明,在使用前仍需要初始化。
微软建议:对于简单的变量,使用camelCase规则,而对于比较高级的命名则使用PascalCase规则。
c#中声明变量的语法是
<type><name>
一 简单类型变量
1.1 数值类型变量
数值类型是最简单的变量类型,数值类型有多种。
整数类型的变量类型有:
类型 | 别 名 | 允许的值 |
sbyte | Symstem.SByte | 在-128~127之间的整数 |
byte | Symstem.Byte | 在0~255之间的整数 |
short | Symstem.Int16 | 在-32768~32767之间的整数 |
ushort | Symstem.UInt16 | 在0~65535之间的整数 |
int | Symstem.Int32 | 在-2147483648~2147483647之间的整数 |
uint | Symstem.UInt32 | 在0~4294967295之间的整数 |
long | Symstem.Int64 | 在-9223372036854775808~9223372036854775807之间的整数 |
ulong | Symstem.UInt64 | 在0~18446744073709551615之间的整数 |
一些变量名称前面的“u”是unsigned的简称,表示不能在这些类型的变量中存储负号。
浮点数变量类型有三种:float、double、和decimal、
1.2 其他简单类型
除了数值类型外,还有另外3种简单类型。
类型 | 别名 | 允许的值 |
char | System.Char | 一个Unicode字符,存储0~65535之间的整数 |
bool | System.Boolean | 布尔值:true或false |
string | System.String | 一组字符 |
字符串中的转移字符(即是转义序列,他是由两到三个char字符表示的),·一种特殊的字符常量,·以反斜线"\"开头,后跟一个或几个字符。·具有特定的含义,不同于字符原有的意义,故称“转义”字符。主要用来表示那些用一般字符不便于表示的控制代码。它的作用是消除紧随其后的字符的原有含义用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,因此称为“转义”用可以看见的字符表示那不可以看见的字符, 如'\n'表示换行。具体如下表所示
转义序列 |
产生的字符 |
字符的Unicode值(16进制) |
\’ |
单引号 |
0x0027 |
\” |
双引号 |
0x0022 |
\\ |
反斜杠 |
0x005C |
\0 |
空 |
0x0000 |
\a |
警告(产生蜂呜) |
0x0007 |
\b |
退格 |
0x0008 |
\f |
换页 |
0x000C |
\n |
换行 |
0x000A |
\r |
回车 |
0x000D |
\t |
水平制表符 |
0x0009 |
\v |
垂直制表符 |
0x000B |
二 复杂的变量类型
2.1 枚举类型
当希望变量提取的值是一个固定集合中的值时,就用到了枚举类型。
定义枚举
enum typeName : type { value1, value2, value3, ... valueN }
枚举使用一个基本类型来存储。枚举的基本类型可以是byte,sbyte,short,ushort,int,uint,long,ulong。在默认情况,不定义type类型的情况下,该类型为int。
在默认情况下,枚举类型中每个值都会根据定义的顺序(从0开始),自动赋给对应的基本类型值。这意味着value1的实际值(类似于角标)是0,value2的值是1等。可以重写这个赋值过程:使用=运算符,并制定每个枚举的实际值(类似于角标)。例如
namespace ConsoleApplication1 { enum orientation:byte { north=1, south=2, east=3, west=4 } class Program { static void Main(string[] args) {
....... } } }
枚举类型的数据是独立于byte,short,int等的类型,当实际重新得到一个具体的枚举中的值时,得到的是enum枚举类型的数据,仍需用强制转换成int或者byte等数据。另外注意枚举类型的定义是在namespace中的class定义之前,与class的定义是独立的,而不是在class中。
2.2 结构类型
结构(struct,是structure的简写)就是由几个数据组成的数据结构,这些数据可以有不同的类型。根据这个结构,可以定义自己的变量类型。
定义结构
struct <typename> { <memberDeclarations> }
<memberDeclarations>部分包含变量的定义(成为结构的数据成员),其格式与往常一样。每个成员的声明都采用如下形式:
<accesslibility> <type> <name>
例如,
namespace ConsoleApplication1029 { enum orientation:byte { north=1, south=2, east=3, west=4 } struct route { public orientation direction; public double distance; } class Program { static void Main(string[] args) { ........ } } }
定义了结构类型后,就可以定义新类型的变量,来使用该结构:
route myRoute
还可以通过句点字符来访问这个组合变量中的数据成员:
myRoute.direction=orientation.north; myRoute.distance=2.5;
注意枚举以及结构类型的定义是在namespace中的class定义之前,与class的定义是独立的,而不是在class中,而使用这些类型是在class的main函数里。
2.3 数组类型
数组是用来存储多个类型相同的数据。一维数组类似于matlab中的行向量,二维数组类似于matlab中的矩阵,此外还有更高维的数组,以及数组的数组。
2.3.1一维数组的声明及初始化
一维数组的声明方式:
<basetype>[] <name>
一维数组的初始化
1. 先声明,后初始化。
int[] myIntArray; myIntArray = new int[5];
2. 声明的同时进行初始化,可以用字面形式指定数组的完整内容,使用字面值指定属猪,只需要提供一个用逗号分隔开的元素值列表 ,该列表放在花括号中,例如:
int[] myIntArray={5,9,10,2,99};
其中,myIntArray有5个元素,每个元素都被赋予了一个整数值。
3. 声明的同时进行初始化,可以指定数组的大小,再使用关键字new初始化所有的数组元素。例如:
int[] myIntArray=new int[5];
这里使用关键字new显式地初始化数组,用一个常量定义其大小。这种方式会给所有的数组元素赋予同一个默认值,对于数值类型来说,这个默认值是0.
4.还可以使用2,3这两种初始化方式的组合:
int[] myIntArray=new int[5] {5,9,10,2,99}
使用这种方式,数组大小必须与元素个数相匹配。
如果要使用变量定义一维数组的大小,该变量必须是一个常量,例如:
const int arraySize=5; int[] myIntArray=new int[arraySize] {5,,9,10,2,99}
如果省略了关键字const,运行这段代码就会失败。
2.3.2 二维数组的声明及初始化
二维数组的声明
<baseType>[,] <name>;
相应的更多维的数组只需要更多的逗号,例如 <baseType>[,] <name>; 该语句声明了一个4维数组。
二维数组的初始化
总体与前面变量的初始化类似,例如
double[,] hillHeight=new double[3,4];
也可以使用字面值进行初始的赋值。这里使用嵌套的花括号,用逗号分隔开,内部的每个花括号的数据对应着数组每一行,例如
double[,] hellHeight={{1,2,3,4},{2,3,4,5},{3,4,5,6}};
要访问多维数组中的每个元素,只需指定他们的下标,并用逗号分隔开,例如 hillHeight[2,1] ,接着就可以像其他元素那样处理它了。
注意,下标是从0开始的。
2.3.3 数组的数组
多维数组可以成为矩形数组,这是因为每一行的元素个数一样。而数组的数组,则可以使每行都有不同的元素个数,但是这些数组都必须要有相同的基本类型。
声明数组的数组:
int[][] jaggedIntArray;
但是初始化数组的数组则跟初始化多维数组那样简单了。
有两种初始化数组的数组的方式。
1. 先初始化初始化包含了其他数组的数组,然后一次初始化子数组。
jaggedIntArray=new int[2][]; jaggedIntArray[0]=new int[3]; jaggedIntArray[1]=new int[4];
2. 也可以使用上述字面值赋值的一种改进形式:
jaggedIntArray= new int[3][] {new int[] {1,2,3}, new int[] {1},new int[] {1,2}};
3. 也可以简化,将数组的初始化和声明放在同一行上,例如
int[][] jaggedIntArray= {new int[] {1,2,3}, new int[] {1},new int[] {1,2}};
2.4 利用foreach来对数组进行循环只读操作
foreach循环可以使用一种简便的语法来定位数组中的每个元素:
foreach (<basetype> <name> in <array>) { //can use <name> for each element }
这个语法对一维二维数组都是直接可用的,而要对数组的数组进行此操作,则必须使用两个foreach来进行嵌套循环。