C# 类以参数在方法中的传递问题

来源:互联网 发布:微博运营 知乎 编辑:程序博客网 时间:2024/05/20 06:08

今天研究了一下午的类以参数在方法中的传递问题
得出了一些结论(不知是否正确)
方法中传递参数分为两种:
1:值传递
2:引用传递
这在值类型变量中体现相当明显
值传递方法调用结束后参数值是不会改变的
引用传递方法调用结束后参数值随方法内值的变化而变化的

因为值类型数据声明后分配的空间是直接用来存值的
在调用方法时采用值传递,系统会直接Copy一份变量空间的内容给方法
值类型的空间本身就是值所以Copy进去的是值的Copy
方法内对值的Copy进行处理,方法结束后值的Copy释放,所以原值没改变
而采用引用传递,系统会拷贝变量空间的指针给方法
指针直接指向原变量的值
方法内对指针指向的原值进行处理,方法结束后释放指针,所以原值改变

而类以参数传递就有相当大的问题
因为类本身分配的空间就是用来存储指针,指针指向堆栈中实例化的类
在调用方法时采用值传递,系统Copy变量空间的内容给方法
类的空间本身存放的是指向实例化类的指针
因此,如果在方法中的操作会分为两种:
1是对指针操作(如:类实例1=类实例2)
这个操作表现的和值类型参数一样方法结束后
类参数的指针Copy被释放,原指针没改变
原指针指向的类实例也没改变,操作完成类没发生改变
2是对指针指向的实例化类的内部操作(如:类实例1.属性1=某值)
这个操作的方法结束后
类参数的指针Copy被释放,原指针没改变
原指针指向的类实例改变,操作完成类发生改变

采用引用传递后,系统Copy变量空间的指针给方法
这时指针指向的空间还是指针
形成:指针指1向指针2,指针2指向类实例
方法不能对 针指1操作
可以对 指针2(如:类实例1=类实例2),类实例(如:类实例1.属性1=某值)操作
会产生多个不同的结果
最后的结果表现为类的内容为指针最后指向的类实例的类属性被操作后的结果

原创粉丝点击