C#中,像int i = 2; string s = i.toString();这样的类型转换会进行装箱操作吗?

mqyzll 2011-08-03 09:17:08
C#中,像int i = 2; string s = i.toString();这样的类型转换会进行装箱操作吗?
...全文
420 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
JRoger_ 2011-08-04
  • 打赏
  • 举报
回复
不会。http://msdn.microsoft.com/zh-cn/library/yz2be5wk.aspx仔细体会一下。
--reply by CSDN Study Trial V1.0.0 (starts_2000)
lijie_255456 2011-08-04
  • 打赏
  • 举报
回复
不会的!
mqyzll 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 vrhero 的回复:]
引用 17 楼 mqyzll 的回复:
按书上写的int不过是一个4字节的值,没有办法在它上面调用方法,要装箱之后才能调用方法啊?还有书上说“装箱用于描述把一个值类型转换为引用类型”,难道引用类型和object是一回事吗?

第一、书有上下文,别看了上文不管下文...或者看了半天上下文联系不起来...那都是白看...

第二、尽信书不如无书...比较“书上说“装箱用于描述把一个值类型转换……
[/Quote]

嗯,受教了,在书上看到这个章节之后产生了这个疑问,总觉得应该装箱才对啊,搞不明白了。以我现在的水平也难以分清楚书上说的哪些是对的,哪些是错的……
mqyzll 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 abbey 的回复:]
说到C#高级编程,请参阅第33页的描述:

For example, when you declare an int in C#, what you are actually declaring is an instance of a .NET struct, System.Int32. This may sound like a small point, but it has a profo……
[/Quote]

既然object是所有引用类型的基类,那么从值类型转换到object类型或者引用类型都要进行装箱了???
int变量到底是一个4字节的数据,还是一个system.int32的对象?如果仅是数据那么它应该没有方法可调用啊,如果是struct,那它也是值类型的啊,而string是引用类型,值类型到引用类型不应该装箱吗?
vrhero 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 mqyzll 的回复:]
按书上写的int不过是一个4字节的值,没有办法在它上面调用方法,要装箱之后才能调用方法啊?还有书上说“装箱用于描述把一个值类型转换为引用类型”,难道引用类型和object是一回事吗?
[/Quote]
第一、书有上下文,别看了上文不管下文...或者看了半天上下文联系不起来...那都是白看...

第二、尽信书不如无书...比较“书上说“装箱用于描述把一个值类型转换为引用类型””那就是胡说八道...

看书不是看的过程,是思考的过程...
老毕 2011-08-04
  • 打赏
  • 举报
回复
说到C#高级编程,请参阅第33页的描述:

For example, when you declare an int in C#, what you are actually declaring is an instance of a .NET struct, System.Int32. This may sound like a small point, but it has a profound significance: it means that you are able to treat all the primitive data types syntactically as if they were classes that supported certain methods.
老毕 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 mqyzll 的回复:]

C#高级编程(第七版)中写到:
string s = 10.ToString();
C#数据类型可以分为在栈上分配内存的值类型和在堆上分配内存的引用类型。如果int不过是栈上的一个4字节的值,该如何在它上面调用方法?
C#的实现方式是通过一个有点魔术性的方式,即装箱。装箱和拆箱可以把值类型转换为引用类型,并把引用类型转换回值类型。因为这是基本的操作,即把值强制转换为object类型。……
[/Quote]
int实际对应了CTS里的Int32,而Int32在CTS里是个struct,有特定的几个方法和成员。
object是所有引用类型的基类。
mqyzll 2011-08-04
  • 打赏
  • 举报
回复
C#高级编程(第七版)中写到:
string s = 10.ToString();
C#数据类型可以分为在栈上分配内存的值类型和在堆上分配内存的引用类型。如果int不过是栈上的一个4字节的值,该如何在它上面调用方法?
C#的实现方式是通过一个有点魔术性的方式,即装箱。装箱和拆箱可以把值类型转换为引用类型,并把引用类型转换回值类型。因为这是基本的操作,即把值强制转换为object类型。装箱用于描述把一个值类型转换为引用类型。运行库会为堆上的对象创建一个临时的引用类型“箱子”。

按书上写的int不过是一个4字节的值,没有办法在它上面调用方法,要装箱之后才能调用方法啊?还有书上说“装箱用于描述把一个值类型转换为引用类型”,难道引用类型和object是一回事吗?
luofeng0710 2011-08-03
  • 打赏
  • 举报
回复
不会装箱。
  • 打赏
  • 举报
回复
恩,值类型之间转换,是不会装拆箱的,值和引用类型转换才会装拆箱
danjiewu 2011-08-03
  • 打赏
  • 举报
回复
string不是值类型
不过这里确实没有装拆箱操作
老毕 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ai0_0jun 的回复:]

装箱与拆箱,是 针对,引用类型和值类型之间的操作。
从INT 和 STRING 都是值类型 ,是不会装箱或者拆箱的。
OBJECT OBJ=1;
INT I=CONVAETE.TOINT32(OBJ) 拆箱
INT I=1;
OBJECT OBJ=I; 装箱
[/Quote]


string 是引用类型
ai0_0jun 2011-08-03
  • 打赏
  • 举报
回复
装箱与拆箱,是 针对,引用类型和值类型之间的操作。
从INT 和 STRING 都是值类型 ,是不会装箱或者拆箱的。
OBJECT OBJ=1;
INT I=CONVAETE.TOINT32(OBJ) 拆箱
INT I=1;
OBJECT OBJ=I; 装箱
lauxm 2011-08-03
  • 打赏
  • 举报
回复
不进行
装箱是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。
zhlin118 2011-08-03
  • 打赏
  • 举报
回复
LZ还需要多了解清楚哪些是值类型,哪些是引用类型。
kid_wang 2011-08-03
  • 打赏
  • 举报
回复
如果是
int i =2;
Object obj = i;
这是隐式装箱。
wu_rual123 2011-08-03
  • 打赏
  • 举报
回复
任何值类型、引用类型可以和object(对象)类型之间进行转换,这才是装箱与拆箱
例:

int i = 10;

object obj = i; //隐式装箱

object obj = object(i); //显式装箱
kid_wang 2011-08-03
  • 打赏
  • 举报
回复
不进行
老毕 2011-08-03
  • 打赏
  • 举报
回复
box、unbox发生在值类型与引用类型之间的转换

int i = 2;  // 没有box
string s = i.ToString(); // 没有box,有的是方法调用


仔细理解一下这个链接的内容:
http://msdn.microsoft.com/zh-cn/library/yz2be5wk.aspx
MOTA 2011-08-03
  • 打赏
  • 举报
回复
不会不会不会
加载更多回复(4)

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧