C#面试之 值类型和引用类型区别

 

1.值类型继承自System.ValueType;引用类型继承自System.Object,

System.ValueType继承自System.Object,所以所有值类型可以转换为相应 的引用类型,这一过程称为装箱,但会造成性能损耗,

其过程为

  • 在堆上分配值类型在栈上相应大小的空间+类型对象引用+同步块引用
  • 将栈上值复制到新配的堆空间上
  • 返回新堆上新对象的引用

2.如何避免装箱

  • 常见场景为值类型的格式化输出

例如

//发生装箱
var str1 = $@"YOU ARE NO {1}"
//都是引用类型没有装箱
var str2 = $@"YOU ARE NO {1.ToString()}"
  •   ArrayList这种Object容器的使用

但是自从C#2引入泛型可以解决装箱问题

posted @ 2022-04-30 22:40  东百牧码人  阅读(43)  评论(0)    收藏  举报