C#传递类型的相关问题
包含引用类型的值类型赋值
当值类型包含其他引用类型时,赋值将生成一个引用的副本,这样就有两个独立的结构,每一个都包含指向内存中同一个对象的引用(也就是“浅复制”)。当想执行一个“深复制”,即将内部引用的状态完全复制到一个新对象中时,需要实现ICloneable接口。
按值传递引用类型
当引用类型被当做参数传递到函数中,该引用类型的值会被修改,相当于复制了指向调用者对象的引用,类似于常量指针,可以修改引用类型的值,但是无法修改引用类型的地址。
按引用传递引用类型
void SnedAPersionByReferece(ref Person p)
被调用者步进可以改变对象的状态,而且可以将引用重新赋值为Persion类型
黄金规则
- [ ] 如果按引用传递引用类型,被调用者可能改变对象的状态数据的值和所引用的对象;
- [ ] 如果按值传递引用类型,被调用者可能改变对象的状态数据的值,但不能改变所引用的对象