C#C#之基本知识和语法3 – 数据类型

转载地址:http://www.jb51.net/article/15507.htm

引用类型和值类型的分别

值类型 引用类型
内存分配地点 分配在栈中 分配在堆中
效率 效率高,不需要地址转换 效率低,需要进行地址转换
内存回收 使用完后,立即回收 使用完后,不是立即回收,等待GC回收
赋值操作 进行复制,创建一个同值新对象 只是对原有对象的引用
函数参数与返回值 是对象的复制 是原有对象的引用,并不产生新的对象
类型扩展 不易扩展 容易扩展,方便与类型扩展

1.值类型

值类型包括简单值类型和复合型类型。简单值类型可以再细分为整数类型、字符类型、实数类型和布尔类型;而复合类型则是概括类型的复合,包括社团(struct)类型和枚举(enum)类型。

平头项目

数据类型
说明
取值范围
对应于System程序集中的结构
sbyte
有符号8位整数
-128-127
SByte
byte
无符号8位整数
0-255
Byte
short
有符号16位整数
-32768-32767
Int16
ushort
无符号16位整数
0-65535
UInt16
Int
有符号32位整数
-2147489648-2147483647
Int32
uint
无符号32位整数
0-42994967295
UInt32
long
有符号64位整数
-263-263
Int64
ulong
无符号64位整数
0-264
UInt64

字符类型

C#中动用Unicode字符集来代表字符类型。

实数类型

数据类型
说明
取值范围
float
32位单精度实数
1.5*10-45-3.4*1038
double
64位双精度实数
5.0*10-324-1.7*10308
demcimal
128位十进制实数
1.0*10-28-7.9*1028

布尔(bool)类型

取值只好是ture或者false,bool类型对应于.NET类库中的System.Boolean结构。它在处理器中占4个字节,即32位存储空间。

协会类型

把一密密麻麻相关的音讯集团改为一个单一实体的进程,这就是成立一个协会的历程。

struct person

{

string m_name; //姓名

int m_age; //年龄

string m_sex; //性别

}

枚举类型

首要用于表示一个逻辑相关联的项和构成。使用紧要字enum来定义。

enum Weekday

{

Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

}

2.引用类型

引用类型包括类(class)、接口(interface)、委托(delegate)和数组(array)。

类(class)

类是一组具有相同数据结构和相同操作的目的集合。成立类的实例必须拔取紧要字new来开展宣示。

(重点)类和社团之间的常有区别在于:结构是值类型,而类是引用类型。对于值类型,每个变量直接包含我的所有数据,每成立一个变量,就在内存中开拓一块区域;而对于引用类型,每个变量只存储对目的存储数据的引用,每创设一个变量,就扩展一个针对目的数据的指针。

接口(interface)

应用程序之间要相互调用,就亟须事先达成一个协议,被调用的一方在协议中对协调所能提供的服务开展描述。在C#中,这一个协议就是接口。接口定义中对艺术的表明,既不包括走访限制修饰符,也不包括方法的施行代码。

(注意)如若某个类继承了一个接口,那么它就要兑现该接口所定义的劳务。也就是落实接口中的方法。

委托

寄托用语封装某个方法的调用过程。

信托的运用过程分成3步:

1.定义 delegate void
HelloDelegate();

2.实例化 HelloDelegate hd = new
HelloDelegate(p1.Say); //p1.Say调用的点子

3.调用 hd();

数组

数组紧要用于同一数据类型的多寡举办批量甩卖。在C#中,数组需要起始化之后才能应用。

如:int[] array1 = new
int[3]{2,3,5};

int[] array1 =
{2,3,5};

(注意)对规则多维数组,调用Length属性所得的值为所有数组的长度;而调用其GetLength方法,参数为0时获取数组第1维的长短,为1时收获数组第2维的长度,以此类推。而对于不规则多维数组,调用Length属性和以0为参数调用其GetLength方法,得到的都是首先维的长度。

3.类型转换

数值转换

数值的转换有一个尺度,即从低精度类型到高精度类型一般可以举办隐式转换;而从高精度类型则必须开展显式转换。

如:int i = 100;

long j = 1000;

j = i; //隐式转换,由低精度到高精度的更换

i = (int)j; //显式转换,有高精度到底精度的更换

实际转换过程中音信的散失就看各数据类型的精度了。(可以参考下边数据类型)

枚举转换

枚举类型与另外任何类型之间不存在隐式转换。而和枚举类型相关的显式转换包括:

1.从拥有整数类型(包括字符类型)和实数类型到枚举类型的显式转换;

2.从枚举类型到所有整数类型(包括字符类型)和实数类型的显式转换;

3.从枚举类型到枚举类型的显式转换。

装箱和拆箱转换

根本是值类型与引用类型之间交互转换。

如:object obj 1=
10;

int i = (int)obj;
//拆箱

int j = 100;

object obj2 = j;
//装箱

转移检查

假设出现更换败北,程序就会抛出一个System.InvalidCastException分外

相关文章