注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C#内的值类型与引用类型  

2010-07-24 17:09:50|  分类: NET(C#) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天同事遇到一个问题,在使用Collection泛型时,传进去的变量无法修改,即如下情形:

public struct xx

{

public int xx;

public int yy;

}

Collection<xx> aa; 如果使用aa[iNum].xx = 0;就会报错,说什么它不是一个变量。

想了一下,猛得才想明白了,成天在嘴边儿上挂着值类型和引用类型,到现在真正用起来却晕了头。struct 是一个值类型,也就是说你在遍历时得到的是一个真正对象的临时副本,所以你可以读他,却不可以写回,因为是副本,无法映射回真实的对象值,这就象是你C/C++操作函数传值一样,在栈上操作的是传值,而传引用和传指针才可以真正的改变实体的值。

想通这个一方面,就很简单了,直接把struct 改成class,就好了。class是引用类型,也就是C++的引用,引用是变量的别名,别名是什么,就象有的人在外面混叫他老大,回家孩子向他叫爸爸,老婆叫他老公,不管如何,都是同一个牛叉叉华丽的人。

这里顺便多说一句,传指针,我觉得传得指针也是一个临时的栈上的变量,不过这个变量指向了一块内存地址,而我们改变了这个地址的内容,所以说,这个指针指向的变量就是变了,而指针呢,是做为传进来的指针,在退出函数时,这个指针的副本就退栈没有了,但注意,只是副本,人家正式的还在呢。我觉得这样说,更加可以容易的区分引用和指针的使用。

网上有一种方法,如果使用反射的方法来得到结构体的变量,然后再赋值,则可以达到相同的效果,我觉得这和找到指针的地址有些类似,但不知道是不是一个东西。

学习技术,一定得把基础打实,打实基础的同时,多和实际相结合,这才能成为一个合格的程序员,才有着向优秀成长和前进的条件和根本。

王阳明老哥说得对:知行合一!!!

  评论这张
 
阅读(496)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017