值与引用类型-为什么两者都存在?

时间:2019-01-21 20:52:30

标签: c# primitive-types reference-type

我知道两者都是什么,价值和参考,但我的问题是为什么两者都存在?

我的意思是为什么所有原语都没有被引用(或被引用)?我知道原语不受垃圾收集器的影响,我认为这是一个缺点,我找不到它们的优点,所以我想念什么?

3 个答案:

答案 0 :(得分:2)

  

我的意思是为什么所有原语都没有被引用(或被引用)?我知道原始数据不受垃圾收集器的影响,我认为这是一个缺点

请考虑以下非常通用代码:

 for (var i = 0; i < 1000; i++)
     for (var j = 0; j < 1000; j++)

现在想象一下,每秒调用一次……那将是每秒创建的1000万个引用类型,这些引用类型必须在堆中分配,跟踪并由GC收集。您会认为这是一个优势吗?再想一想...

答案 1 :(得分:0)

我可以迅速提出的两个原因:

  1. 因为引用可以被调用的函数更改,所以可能会有副作用。
  2. 此外,出于部分历史原因,传递char / byte或2个字节仅需要1或2个字节,而引用通常是4个字节。

答案 2 :(得分:0)

  

我知道原语不受垃圾收集器的影响,我认为这是一个缺点,

为什么?您喜欢更多的开销和更低的性能?我使用得当,值类型和不依赖垃圾回收器是非常重要的性能优势。