前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《CLR via C#》Part2之Chapter5 基元类型、引用类型和值类型(三)

《CLR via C#》Part2之Chapter5 基元类型、引用类型和值类型(三)

作者头像
Isaac Zhang
发布2019-09-11 16:56:28
3140
发布2019-09-11 16:56:28
举报
文章被收录于专栏:奔跑的人生奔跑的人生

值类型的拆箱和装箱

对值类型进行装箱操作,内部发生:

  1. 在托管堆中分配好内存;
  2. 值类型的字段复制到新分配的堆内存;
  3. 返回对象地址。

CLR分两步进行拆箱:

  1. 获取以装箱对象中的各个字段的地址;
  2. 将字段包含的值从堆中复制到栈的实例中。
代码语言:javascript
复制
   1:          //以下代码演示了拆箱和复制操作
代码语言:javascript
复制
   2:          public static void Main() {
代码语言:javascript
复制
   3:              IsaacTest model;
代码语言:javascript
复制
   4:              model.x = model.y = 1;
代码语言:javascript
复制
   5:              Object o = model;//对model装箱;o引用已装箱的实例
代码语言:javascript
复制
   6:              model = (IsaacTest)o;//对O进行拆箱,将对象复制到栈变量中
代码语言:javascript
复制
   7:          }

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }


对象相等性和同一性

同一性:两个引用执行同一个对象

重写Equals()必须也同时重写GetHashCode(),因为在System.Collections.HashCode类型、System.Collections.Generic.Dictionary类型以及其他的一些集合实现中,要求

两个对象为了相等,必须具有相同的HashCode。

Dynamic基元类型

为了方便开发人员使用反射或者与基本组件通信

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-03-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 值类型的拆箱和装箱
  • 对象相等性和同一性
  • Dynamic基元类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档