c#为什么要有两种数据类型(值类型和引用类型)

 我来答
Ben
2013-05-14 · 知道合伙人软件行家
Ben
知道合伙人软件行家
采纳数:860 获赞数:2875
认真回答者.

向TA提问 私信TA
展开全部
如果您这么问
那么我就假设您明白这两个的区别

为什么要有.我就大致解释一下
值类型直接存储其值,变量本身就包含了其实例数据,而引用类型保存的只是实例数据的内存引用。因此,一个值类型变量就永远不会影响到其他的值类型变量,而两个引用类型变量则很有可能指向同一地址,从而发生相互影响。

例如
您现在要做一件事情.他永远都用的是一个变量..但是他们的类不同.使用地点也不同(也就是不能直接在调用处访问到定义处)
那么使用时候就是引用类型最方便
另外由于引用类型是指定内存地址.那么程序也会很省内存.
你想想.你的软件有10000个MODEL(例如示例池,系统内存实例缓存池等)
那么如果你要使用它时候他居然是值类型.你如果要改变结果是穿参数时候直接NEW了一个.新的内存存储.
这时候就是引用类型

值类型:
还是上面的缓存池
如果你此时缓存的是一些常用的定值.例如一些系统级的数字.参数

这时你只是临时改变..
如果你是引用类型.那么你就等于隐式的把系统改了.这就不合适了
所以用值类型.
追问
按你的说法引用类型只是比值类型节约空间,而且引用类型还存在隐患,
相对于heap中杂乱无章的对象而言,stack中的变量效率也要高些
那为什么不统一使用值类型,反正现在内存那么便宜。
追答
那为什么不统一使用值类型,反正现在内存那么便宜。这个就是问题了内存便宜不等于他可以乱用例如我目前手头的IM服务器同时在线10W+OK我值类型.就缓存查找我的效率都要低到不知道哪里去了然后呢.如果我是值类型..我想在缓存改值怎么办?我还必须在我的缓存项目中改?我的BLL层我的交互层..怎么去方便的改这10W?
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
空雪梦见
2013-05-14 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1200万
展开全部
如果你学过C++,那么事情就简单了。
引用类型相当于指针变量,值类型相当于普通变量
追问
我是学C#的,能详细的讲下吗?
有例子更好
追答
嗯……这么说吧,比如你在网上看到一张图片,好,你对这图片很感兴趣,就存下来,然后发到qq群里面或者发给好朋友看,这就是值类型:在整个过程中,你传递的是这个图片本身
但是另一种常见的做法,你把网址复制下来,然后发到群里面、转到微博上,这就是引用类型:拿到网址的人自己点进去那个网站看,而不是直接看你给他们的东西。

好,现在网站的编辑发现这图有个地方P得太明显了,想P好一点,于是重新修改修改。这下你们这些拿到链接的人点进去,看到的就是新的图。但是如果你用的前一种方法分享的,那么所有人看到的还是旧的图。

引用类型和值类型的最重要区别就是这里:一个是内容本身,一个代表了内容在其他地方

你用引用类型的时候是不是总是 XXX x = new XXX() 这样?那个new就是创建一个对象,然后x引用它,对x的修改实际上就是对你new出来的XXX的修改。如果你再XXX y = x;,这时y也引用了这个对象,x和y就引用了同一个东西,那么对x修改的话y也就一起变了,因为你修改的是你new出来的那个东西。
再来值类型,你可以这样XX x; 就定义了一个变量x,类型是XX,这个x就是对象本身,而不是一个“引用”。如果你写XX y = x; 此时就和之前不同了,这里的y和x是两个独立的东西,而不是什么y和x引用同一个对象。你对y进行修改,x是不会变的。

值类型表示数据本身,引用类型表示对象所在的地方(你创建出来的)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式