复制值类型的变量和类:
除了string类型为引用类型外,C#的大多数基本数据类型都是值类型。
值类型复制时,会产生一个副本,对副本的修改不会对原值产生影响,而对于引用类型,对象只有一个是存储在堆上的,复制时只是将其引用进行复制,应用中包含了该对象的一个地址。
理解null值和可空类型:
可以将null赋值给引用变量。
使用可空类型:
null为一个引用不能将其赋给值类型,但是可以将一个变量声明为可空的值类型,int? i=null;
理解可空类型的属性:
hasvalue属性指出一个可空类型是包含一个真正的值,还是一个包含null,通过value属性可以获得值。
使用ref与out操作:
为了实现形参修改实参。
创建ref参数:
如果为一个参数附加了ref关键字作为前缀,该参数就会成为实参的一个别名,而不是一个副本,想一个ref参数传递一个实参时,实参也必须附加ref关键字作为前缀,格式如:
void a(ref int a)
{a++;}
void b()
{int arg=42;
a(ref arg);}
变量使用前必须赋值;
创建out参数:
out参数可由方法本身来初始化参数,在方法体中对实参进行初始化;
计算机的内存组织方式:
操作系统和运行时通常将用于容纳数据的内存分为两个独立的区域,每个区域都采用不同的方式进行管理,这两个区域就称为栈和堆;
调用一个方法时,它的参数以及它的局部变量需要的内存总是从栈中获取,方法结束后,为参数和局部变量分配的内存将自动归还给栈
使用new关键字来创建一个对象时,构造对象所需的内存总是从堆中获取的;
system.object类:
为所有类的一个基类;
装箱:
用object引用一个值类型如下:
int i=32;
object o=i;
运行时在堆中分配一小片内存,然后i中的值的一个副本被复制到再片内存中,最后让o引用这个副本,这种将一个数据从栈自动复制到堆中的行为叫做装箱;
拆箱:
对已装箱的值进行前值类型转换
数据类型的安全转换:
is与as 操作符 is o is 类型 返回值是一个bool类型的值,as操作符则在判断的同时如果成功则直接返回该类型,失败则为null