为什么我们需要.NET中的引用类型?
我只能考虑一种情况,它支持在不同功能之间共享数据,从而提供存储优化。
除此之外,我无法枚举任何理由,为什么需要参考类型?
答案 0 :(得分:27)
为什么我们需要.NET中的引用类型?我只能想到一个原因:它支持数据共享,因此可以优化存储。
你已经回答了自己的问题。你需要比这更好的理由吗?
假设您每次想要引用到书籍The Hobbit
时,您必须复制整个文本。也就是说,不是说“当我在前几天阅读The Hobbit
......”时,你不得不说“前几天我正在阅读In a hole in the ground there lived a hobbit... [all the text] ... Well thank goodness for that, said Bilbo, handing him the tobacco jar.
......”
现在假设每次在程序中使用数据库而不是将引用到数据库时,您只需制作整个数据库的完整副本< / em>,每次你以任何方式使用 。您认为这样的计划有多快?
参考文献允许您通过使用标题而不是内容来撰写谈论书籍的句子。引用类型允许您使用小引用而不是大量数据来编写操作对象的程序。< / p>
答案 1 :(得分:10)
class Node {
Node parent;
}
尝试在没有引用类型的情况下实现它。它会有多大?字符串有多大?数组?您需要在堆栈上保留多少空间:
string s = GetSomeString();
如何在不特定于一个呼叫路径的方法中使用任何数据?例如,多线程代码。
答案 2 :(得分:5)
我可以想到三个原因。
每次需要将对象传递给方法或集合类型时,您都不希望不断复制对象。
在遍历集合时,您可能希望使用新值修改原始对象。
有限的堆栈空间。
答案 3 :(得分:0)
如果您查看 int、long、float 等值类型,您会发现最大的类型存储 8 个字节或 64 位。
但是,考虑一个列表或一个长值数组,在这种情况下,如果我们有一个包含 1000 个值的列表,那么最坏的情况将占用 8000 个字节。
现在,按值传递 8000 字节将使我们的程序运行速度超慢,因为将列表作为参数的函数现在必须将所有这些值复制到一个新列表中,这样我们就会失去时间和空间.
这就是我们有引用类型的原因,因为如果我们传递那个列表,那么我们不会因为我们在内存中传递列表的地址而浪费时间和空间来复制那个列表。
函数中的引用类型将在与您传递的列表相同的地址上工作,如果您想复制该列表,您可以手动进行。
通过使用引用类型,我们可以为我们的程序节省时间和空间,因为我们不必费心复制和保存我们传递的参数。