理解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属性来获取。
如果i不包含真正的值,即为null,就把99赋给它,否则,将其值打印出来。
注意:可空类型的Value属性是只读的,不能修改,要修改可空变量的值,请使用普通的赋值语句。
计算机的内存组织形式——堆和栈
调用一个方法时,它的参数和局部变量需要的内存总是从栈中获取;
使用new关键字来创建一个对象,构造对象所需的内存总是从堆中获取;
栈就像一系列堆得越来越高的箱子,按顺序存取;而堆则像散布在房间里的一大堆箱子,创建对象时,“运行时”会找到一个空箱子,并把它分配给对象;
引用类型放在堆上,而值类型放在栈上。
除了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关键字来创建一个对象,构造对象所需的内存总是从堆中获取;
栈就像一系列堆得越来越高的箱子,按顺序存取;而堆则像散布在房间里的一大堆箱子,创建对象时,“运行时”会找到一个空箱子,并把它分配给对象;
引用类型放在堆上,而值类型放在栈上。
相关文章推荐
- C#值类型和引用类型的深入理解
- C#之理解值类型和引用类型
- [转]理解C#值类型与引用类型
- C# 中堆栈,堆,值类型,引用类型的理解
- 关于C#中 的引用类型需要实例化,值类型不需要实例化的理解
- C# 中堆栈,堆,值类型,引用类型的理解 (摘抄)
- C#值类型和引用类型的深入理解
- 理解C#值类型与引用类型(收藏)
- C# 中堆栈,堆,值类型,引用类型的理解 (摘抄)
- C#值类型和引用类型的深入理解
- 彻底理解C#中值类型和引用类型的区别
- C#中值类型、引用类型 再次理解
- 理解C#值类型与引用类型
- C#值类型和引用类型的深入理解
- 海洋工作室——网站建设专家:对C# 中堆栈,堆,值类型,引用类型的理解
- [转]理解C#值类型与引用类型
- 读《.NET(C#):理解值类型/引用类型,装箱/拆箱,Object类》 有感,小白类文
- C#值类型和引用类型的深入理解
- C#中值类型与引用类型通俗理解
- 理解C#值类型与引用类型