值类型的装箱

王子文龙 2015-03-30 03:10:10
未装箱的值类型:方法表存在哪里?线程栈上的变量中吗?
已装箱的值类型:堆上的已装箱值类型对象的类型对象指针指向哪里?
...全文
139 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
moonwrite 2015-03-31
  • 打赏
  • 举报
回复
引用 2 楼 mh_ma 的回复:
[quote=引用 1 楼 starfd 的回复:] 装箱就是变成引用类型,你说放哪里去了……
我问的是类型对象指针指向谁?也不是说的对象。。。。[/quote] 指向... Type t1 = s.GetType(); Type t2 = typeof(string); 你就可以通过t1 得到一个类型的元数据的各种信息 如果你确定要说指向什么地方的话,那么应该就是指向一个类的元数据 https://msdn.microsoft.com/zh-cn/library/system.type(v=vs.110).aspx 元数据以非特定语言的方式描述在代码中定义的每一类型和成员。元数据存储以下信息: 程序集的说明。 标识(名称、版本、区域性、公钥)。 导出的类型。 该程序集所依赖的其他程序集。 运行所需的安全权限。 类型的说明。 名称、可见性、基类和实现的接口。 成员(方法、字段、属性、事件、嵌套的类型)。 属性。 修饰类型和成员的其他说明性元素。
moonwrite 2015-03-31
  • 打赏
  • 举报
回复
引用 7 楼 mh_ma 的回复:
[quote=引用 3 楼 moonwrite 的回复:] 看看.net 程序员必看的那本 《CLR via C#》 作者参与了.net的设计,书中详细地说了这一个过程 还有图
我就是看的这本书,上图看吧,描述的清楚些 假设Manager是一个已装箱的值类型,那么会创建右侧的那个Manager类型对象吗? 对于未装箱值类型来说,是不是像引用类型那样也会有一个类型对象存在? 这么说表达的清楚点吗[/quote] 明白你要知道什么了~ 类型对象 可以说是该书作者提出的一个概念,我其他书很少看到,可以说是作者创造出来的~ 其实作者说的 类型对象 是指你写代码的时候 定义一个类的所有信息(包含值类型和引用类型) 所以任何一个对象实例(无论是值类型或者引用类型)都有一个 类型对象 你可以用GetType获取作者所说的 类型对象 https://msdn.microsoft.com/zh-cn/library/system.object.gettype(v=vs.110).aspx 假设Manager是一个已装箱的值类型,(这个上面已经回答了你,无论是值类型或引用类型,都有类型对象) 那么会创建右侧的那个Manager类型对象吗? 这个你就搞错了~是先有Manager类型对象,再有Manager对象的 也就是先有类型,再有对象。而每个对象,都必须知道他的类是谁, 也就是图中说的 类型对象指针 ,但你用GetType的时候,就通过这个指针去找对象的类。 为什么要这样干呢 在C++之类的底层语言,一定被编译了,你所定义的方法名啊,变量命都被去掉了 而.net之所以要保持我们在定义类的时候的方法名 变量名,是为了实现反射。 所以你要反射一个对象,是从GetType开始的~ , Manager类型对象 中也有一个 类型对象指针,这个是给typeof用的 string s="a"; Type t1 = s.GetType(); Type t2 = typeof(string); 上面的 t1 的信息 = t2 的信息
Regan-lin 2015-03-31
  • 打赏
  • 举报
回复
引用 7 楼 mh_ma 的回复:
[quote=引用 3 楼 moonwrite 的回复:] 看看.net 程序员必看的那本 《CLR via C#》 作者参与了.net的设计,书中详细地说了这一个过程 还有图
我就是看的这本书,上图看吧,描述的清楚些 假设Manager是一个已装箱的值类型,那么会创建右侧的那个Manager类型对象吗? 对于未装箱值类型来说,是不是像引用类型那样也会有一个类型对象存在? 这么说表达的清楚点吗[/quote] 如果是值类型那么就是在栈里面的,不是在堆的
ww_2446135903 2015-03-31
  • 打赏
  • 举报
回复
C#值类型的装箱和拆箱 一、装箱 class program { static void Main()//入口方法 { int i = 200;//定义整型变量并赋值 object o = i;//对值类型装箱操作 i = 100;//修改整型变量的值 System.Console.Write(i);//输出整型变量的值 System.Console.Write(o);//输出已装箱值类型的值 System.Console.ReadLine();//codego.net等待回车继续 } } 二、拆箱 class program { static void Main()//入口方法 { int i = 200;//定义整型变量并赋值 object o = i;//对值类型装箱操作 i = 100;//codego.net修改整型变量的值 int i2 = (int)o;//对已装箱值类型执行折箱操作 System.Console.Write(i);//输出整型变量的值 System.Console.Write(i2);//输出已装箱值类型的值 System.Console.ReadLine();//等待回车继续 } }
王子文龙 2015-03-30
  • 打赏
  • 举报
回复
引用 3 楼 moonwrite 的回复:
看看.net 程序员必看的那本 《CLR via C#》 作者参与了.net的设计,书中详细地说了这一个过程 还有图
我就是看的这本书,上图看吧,描述的清楚些 假设Manager是一个已装箱的值类型,那么会创建右侧的那个Manager类型对象吗? 对于未装箱值类型来说,是不是像引用类型那样也会有一个类型对象存在? 这么说表达的清楚点吗
江南小鱼 2015-03-30
  • 打赏
  • 举报
回复
这种理论的东西,还是看msdn吧,配有图片说明的。
Mo_莫库什勒 2015-03-30
  • 打赏
  • 举报
回复
未装箱的值类型存在栈中,装箱后指针指向堆中的引用类型
  • 打赏
  • 举报
回复
引用类型的地址应该是在地址寄存器那里
moonwrite 2015-03-30
  • 打赏
  • 举报
回复
看看.net 程序员必看的那本 《CLR via C#》 作者参与了.net的设计,书中详细地说了这一个过程 还有图
王子文龙 2015-03-30
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
装箱就是变成引用类型,你说放哪里去了……
我问的是类型对象指针指向谁?也不是说的对象。。。。
  • 打赏
  • 举报
回复
装箱就是变成引用类型,你说放哪里去了……

110,535

社区成员

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

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

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