CLR Via C# 读书笔记-第5章 基元类型、引用类型、值类型


基元类型

  • 基元类型 编译器直接支持的数据类型 e.g. int byte等
  • 表达式中如果都是字面值,编译时就会完成表达式求值,从而提高性能

引用类型和值类型

  • 非托管代码C/C++中定义类型后,使用该类型的代码决定在哪分配实例。而在托管代码中由定义类型的人员决定在哪分配实例。
  • 设计值类型应当考虑实参、返回值均会设计值类型字段拷贝,造成性能损失。
  • 将值类型变量复制给另一个值类型变量,将会逐字段复制
  • CLR会控制类型字段的布局,引用类型默认StructLayoutAttribute.Auto,值类型默认StructLayoutAttribute.Sequential(保持定义时的顺序)。如果值类型不与非托管代码互操作设置为StructLayoutAttribute.Auto将会又更好的性能

值类型的装箱和拆箱

  • 值类型如果没实现ToString,在调用ToString时会进行装箱
  • 建议 将值类型字段标记为readonly
  • ReferenceEquals 检查同一性,2个引用指向同一个对象
  • 值类型基类ValueType的Equals方法利用反射,所以定义自己的结构体时,应当自定义Equals方法,以提高比较性能。根据需要实现IEquatable<T>、==、!=、IComparable、IComparable<T>、<, <=, >, >=
  • 重写Equals还需要重写GetHashCode

对象哈希码

  • Object 或 ValueType 的 GetHashCode 方法性能都不高

dynamic 基元类型

  • 用到的比较少、占个坑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值