| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1308 人关注过本帖
标题:关于引用类型和值类型的区别 一直弄不明白 达人解释
只看楼主 加入收藏
达文西
Rank: 1
等 级:新手上路
威 望:1
帖 子:117
专家分:0
注 册:2007-8-4
收藏
 问题点数:0 回复次数:9 
关于引用类型和值类型的区别 一直弄不明白 达人解释

using System;
class Reftyperectangle
{
public int Width;
public int Height;
}
struct Valtyperectangle
{
public int Width;
public int Height;

}

class Refvaltest
{
public static int Main()
{
Reftyperectangle rec1 = new Reftyperectangle();
rec1.Width = 15;
rec1.Height = 10;
Reftyperectangle rec2 = rec1;
Console.WriteLine(rec2.Width+"*"+rec2.Height);
rec1.Width = 25;
rec1.Height = 20;
Console.WriteLine(rec2.Width + "*" + rec2.Height);


Valtyperectangle rec3 = new Valtyperectangle();
rec3.Width = 10;
rec3.Height = 15;
Valtyperectangle rec4 = rec3;
Console.WriteLine(rec4.Width+"*"+rec4.Height);
rec3.Width=25;
rec3.Height=30;
Console.WriteLine(rec4.Width+"*"+rec4.Height);
Console.ReadLine();
return 0;

}

}


这道题运行结果是 15*10
25*30
15*10
15*10
using System;

class stringexample
{
public static int Main()
{
string s1 = "A string";
string s2= s1;
Console.WriteLine(s1);
Console.WriteLine(s2);
s1="Another string";
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.ReadLine();

return 0;

}
}

这道题运行结果是 A string
A string
Another string
A string
我快晕了
达人快来解释阿



搜索更多相关主题的帖子: 类型 解释 
2007-08-23 14:01
立志成佛
Rank: 1
等 级:新手上路
威 望:2
帖 子:314
专家分:0
注 册:2006-11-1
收藏
得分:0 
[QUOTE]15*10
25*20
10*15
10*15[/QUOTE]


第一题结果

曾经的曾经已不在
2007-08-23 14:30
达文西
Rank: 1
等 级:新手上路
威 望:1
帖 子:117
专家分:0
注 册:2007-8-4
收藏
得分:0 
回复:(达文西)关于引用类型和值类型的区别 一直弄...
对阿  
2007-08-23 14:35
立志成佛
Rank: 1
等 级:新手上路
威 望:2
帖 子:314
专家分:0
注 册:2006-11-1
收藏
得分:0 
以下是引用立志成佛在2007-8-23 14:30:08的发言:
15*10
25*20
10*15
10*15



第一题结果

Reftyperectangle类 是引用传递
引用传递的时候2个实例同时指向内存的同一个地址

Valtyperectangle结果 是值传递
值传递的时候2个实例在内存中各自有自己的地址


曾经的曾经已不在
2007-08-23 14:37
virusplayer
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-8-2
收藏
得分:0 


引用传递的时候2个实例同时指向内存的同一个地址


值传递的时候2个实例在内存中各自有自己的地址

2007-08-23 14:44
立志成佛
Rank: 1
等 级:新手上路
威 望:2
帖 子:314
专家分:0
注 册:2006-11-1
收藏
得分:0 
string 这个类型比较特殊

如果你两次定义的时候,赋值都一样的话只会建立一个实例,两个都引用这个实例。
如果你定义不同的时候,则会新建立一个实例,然后两个指向不同的实例。

string是只读的,每次有变化,必须在内存中重新分配地址存放新的值。

曾经的曾经已不在
2007-08-23 14:55
virusplayer
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-8-2
收藏
得分:0 

那就使用stringbuilder好了

2007-08-23 15:11
达文西
Rank: 1
等 级:新手上路
威 望:1
帖 子:117
专家分:0
注 册:2007-8-4
收藏
得分:0 
以下是引用virusplayer在2007-8-23 14:44:22的发言:


引用传递的时候2个实例同时指向内存的同一个地址


值传递的时候2个实例在内存中各自有自己的地址

这个我理解了

[此贴子已经被作者于2007-8-23 17:30:46编辑过]

2007-08-23 17:27
达文西
Rank: 1
等 级:新手上路
威 望:1
帖 子:117
专家分:0
注 册:2007-8-4
收藏
得分:0 
以下是引用立志成佛在2007-8-23 14:55:00的发言:
string 这个类型比较特殊

如果你两次定义的时候,赋值都一样的话只会建立一个实例,两个都引用这个实例。
如果你定义不同的时候,则会新建立一个实例,然后两个指向不同的实例。

string是只读的,每次有变化,必须在内存中重新分配地址存放新的值。

这样解释正确吗?请问大家 说string这个类型比较特殊

2007-08-23 17:30
ttkool1314
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-8-24
收藏
得分:0 

Reftyperectangle类 是引用传递
要么简单地分析吧!这个类你实现使用的时候~利用NEW 实例化了~系统将分配一个地址给它~那么系统就相对地去操作地址,对变量进行调用、使用(例如:赋值)

Valtyperectangle结果 是值传递
值传递的时候2个实例在内存中各自有自己的地址
在使用你定义的2个变量的同时,内存使用的是你实例化之后的2个不同的内存地址,剖析一下~假如你用基本类型的变量,int 等等~
所以其实值类型和引用类型的矛盾很多人在引用上面卡住,,其实细心剖析值类型可能更加容易区分!
(以上只是我在识别:引用类型和值类型是的思维模式,高人请指点,如有错请不要模仿)

[此贴子已经被作者于2007-8-24 0:22:47编辑过]

2007-08-24 00:21
快速回复:关于引用类型和值类型的区别 一直弄不明白 达人解释
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024203 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved