【发布时间】:2011-11-02 13:33:22
【问题描述】:
在 C# 中,方法的参数可以是引用类型或值类型。传递引用类型时,传递引用的副本。这样,如果在方法内部我们尝试将传递的引用重新分配给另一个对象实例,则在方法外部重新分配是不可见的。
为了实现这一点,C# 具有 ref 修饰符。使用 ref 传递引用类型实际上使用原始引用而不是副本。 (如果我错了,请纠正我)。
在这种情况下,由于我们没有创建引用的副本,我们是否节省了任何内存?如果一个方法被广泛调用,这是否会提高应用程序的整体性能?
谢谢!
【问题讨论】:
-
我认为你实际上不应该受到表现的激励(至少在这种情况下不是)。就像 Mehrdad 在他的回答中所说的那样,只有在需要从方法中更改引用时才应该使用 ref。如果您的方法必须设置它的值,请考虑使用“out”关键字,而不是“ref”。
-
在任何一种情况下,复制引用都不是您的瓶颈。
-
@Kornelije Petak 你的意思是我不应该假设正在发生任何内部指针算术,而是将 ref 修饰符视为允许修改引用的机制?
-
@史密斯先生:没错。
ref指针的大小与 Object 引用的大小相同,因此您在此处获得 nothing —— 只是让您的应用程序变慢(非常少)。 -
@Misters 节省的钱本来就在堆栈上。顺序调用会重用内存,递归调用会在你的第 100 万次调用之前得到一个 StackOverFlow。
标签: c# .net pass-by-reference ref reference-type