您的位置:首页 > 编程语言 > C#

理解C#值类型与引用类型

2011-07-12 16:15 190 查看
值类型和引用类型
除了string类型是引用类型,C#大多数基本数据类型都是值类型;
类是引用类型,结构体是值类型;
null值和可空类型
null值在初始化引用类型时非常有用,但null本身就是一个引用,不能将其赋值给一个值类型,在C#中,以下语句是非法的:int i=null;//不合法
但是,利用C#定义的一个修饰符,可将一个变量声明为一个可空(nullable)值类型。可空值类型在行为上和普通值类型相似,但是可以将一个null值赋值给它。我们用一个问号(?)来制定一个值类型是可空的,如下:
int ? i=null;//合法
为了判断一个可空变量是否为空,可以和引用类型一样的判断方法:
if(i==null)
可以将具有恰当值类型的一个表达式直接赋值给一个可空变量。反之则不然,即可空变量不可以给普通的值类型变量赋值。
理解可为空类型的属性
可空类型对外揭示了两个属性:HasValue属性指出一个可空类型是包含一个真正的值还是null,如果包含一个真正的值,可以用Value属性来获取。
int ? i=null;
....
if(!i.HasValue)
i=99;
else
Console.WriteLine(i.Value);

如果i不包含真正的值,即为null,就把99赋给它,否则,将其值打印出来。
注意:可空类型的Value属性是只读的,不能修改,要修改可空变量的值,请使用普通的赋值语句。
计算机的内存组织形式——堆和栈
调用一个方法时,它的参数和局部变量需要的内存总是从栈中获取;
使用new关键字来创建一个对象,构造对象所需的内存总是从堆中获取;
栈就像一系列堆得越来越高的箱子,按顺序存取;而堆则像散布在房间里的一大堆箱子,创建对象时,“运行时”会找到一个空箱子,并把它分配给对象;
引用类型放在堆上,而值类型放在栈上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: