当前位置:编程学习 > C#/ASP.NET >>

刚刚学C#基础,对象数组和引用传递和值传递不太懂

RT  。 大神帮帮我这个新人 --------------------编程问答-------------------- 值传递就是传递的时候 都是传递副本,就是创造一个一模一样的值,传给函数
引用传递传递的时候不会创建副本,只是传个地址给函数,如你的名字,你的学号,你的小名
它们都指向你,老师叫你的名字也行,叫你的学号也行
如老师在你的学号上扣5分,那么你就扣了5分

(值传递:老师在你的学号扣-5,和你一点关心都没有~)

接下来说说为什么要分为值传递和引用传递
值传递
1.通常比较小,使用堆栈的方法,创建释放比较简单
2.而且根据某种编码规定,通常是不希望 把原来的值改变的 看《重构》

引用传递
对象比较大,复制一副太浪费内存了,所以...

一个是传递的时候,克隆了一份给别人,克隆的那份和本体没有关系
一个是传递的时候,给别人引用,别人怎么使用,和本体有关系密切~ --------------------编程问答-------------------- 你在看球赛
你侄女想看动画片
你买一台一样的电视机给她,这是值传递,之后她怎么换台都跟你没关系
你买一个遥控器给她,这是引用传递,她一换台你也跟着看喜羊羊 --------------------编程问答-------------------- 还有对象数组
这个有什么难以理解的么?
int数组就是一串的整数
double数组就是一串的实数
电视机数组就是一串的电视机
对象数组就是一串的对象 --------------------编程问答--------------------
引用 2 楼 czarten 的回复:
你在看球赛
你侄女想看动画片
你买一台一样的电视机给她,这是值传递,之后她怎么换台都跟你没关系
你买一个遥控器给她,这是引用传递,她一换台你也跟着看喜羊羊


这个回答好帅! --------------------编程问答-------------------- 值和引用的关系,确实需要学点计算机原理,有一点汇编语言编程经验,然后知道c的函数调用时的堆栈处理(压入和弹出参数)模式。毕竟这两个概念是基础,(几乎所有的)高级语言也在这一点上不能免俗。

然后在.net中,在方法调用中的传送自定义对象,所谓传值和传引用,与c的关于自定义对象的定义又不相同。假设是以(默认地)传值方式传送,那么其实就是把对象的引用作为值而传递,返回时参数变量仍然引用原来作为输入时引用的对象(就算是参数引用改变了,编译器也不会把从堆栈上弹出的引用值赋值给变量);而如果是以传引用方式传送,就是把对象的引用作为引用的引用来看待,那么返回时参数的变量可能重新被了新的对象而不是原来的对象(因为编译器总是把从堆栈上弹出的引用值重新赋值给变量)。

关于数组,在.net中是一种特殊的对象。这就好象是一个火车,可能装一车人,也可能装一车货,也可能是个空车。因此数组在参数传递中,就是上述自定义引用对象,而不是类似int、bool那类。 --------------------编程问答-------------------- 记住一点,在.net中,对象的引用传送方式,要比值传递方式,慢很多!

这是与c截然不同的。 --------------------编程问答-------------------- 刚刚开始学,不懂这个没什么,我在使用VB好几年以后才知道什么是按值传递什么是按引用传递。

如果你会写程序,再来理解,是水到渠成的事情。

只有学校里面的考试,才会抠这些字眼呢。 --------------------编程问答--------------------
引用 7 楼 caozhy 的回复:
刚刚开始学,不懂这个没什么,我在使用VB好几年以后才知道什么是按值传递什么是按引用传递。

如果你会写程序,再来理解,是水到渠成的事情。

只有学校里面的考试,才会抠这些字眼呢。


我有一个同事,2年工作经验~有一天看到我写一个 

voie Image.Reset(Image img)方法

问我为什么没有返回值 --------------------编程问答-------------------- 学了C++的传值,指针,引用后,再来理解.NET的参数就容易很多。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,