【三】理解值和引用

①value type值类型:int,float,double和char等类型统称为值类型
referrnce type引用类型:类时引用类型的一个例子。一个引用类型变量其实是一个引用地址。
除了string类型是引用类型,c#语言的大多数基本数据类型都是值类型。

在声明的时候不进行初始化,这是一个很不好的编程习惯。

善用null,null本身是一个引用,不能把它赋给一个值类型。利用“?”可将一个变量声明为可空值类型。
如int? i = null;
不可将一个可空的赋值给一个普通的值类型的变量。

可空类型对外揭示了两个属性,其中,HasValue属性指出一个可空类型是否包含一个真正的值,还是包含null。如果包含一个真正的值,可以利用Value属性来获取这个值。
注意.Value属性并不能被赋值。.HasValue的值是bool

②如果为一个参数(形参)附加了ref关键字作为前缀,该参数就会成为实参的一个别名(或者对实参的一个引用),而不再是实参的一个副本。
使用ref参数时,向参数应用的任何操作,都会同样应用于实参,因为参数(形参)和实参引用的是同一个对象。

out关键字与ref关键字非常相似。可以为参数(形参)附加out前缀,使参数成为实参的一个别名。
和使用ref一样,向参数应用的任何操作都会同时应用于实参。
向方法传递一个out参数后,必须在方法内部对其进行赋值。

③操作系统和运行时(runtime)通常将用于容纳数据的内存划分为两个独立的区域即堆(heap)栈(stack)。

object类型的变量可以引用任何引用类型的任何对象。
将一个数据项从栈(stack)自动赋值到堆(heap)的行为成为装箱(boxing)
如int i = 42;
object o = i;
把一个已装箱的值,进行强制类型转换,赋给一个栈(stack)的过程为拆箱(unboxing)
如object o = 42;
int i = (int)o;

is操作符取两个操作数:左边是对一个对象的引用,右边是一个类型名称。
如果左边的对象是右边的类型,则is表达式的结果是true,反之是false。

as操作符取两个操作数:左边是对一个对象的引用,右边是一个类型名称。
如果左边对象转换成右边的类型,则返回转换成功的结果,如果失败返回null。

posted on 2015-01-16 10:44  相东  阅读(137)  评论(0编辑  收藏  举报

导航