![]() |
1
188
简短回答:阅读我的 article on argument passing . 长答:引用类型参数按值传递时,只传递引用。 不 对象的副本。这就像在C或C++中传递一个指针(按值)。调用者不会看到对参数本身值的更改,但会看到引用指向的对象中的更改。 将 被看见。 传递参数(任何类型)时 通过 引用,这意味着调用方可以看到对参数的任何更改-对参数的更改 是 变量的更改。 当然,这篇文章更详细地解释了这一切:)
有用答案:
你几乎不需要使用REF/OUT
.这基本上是获取另一个返回值的一种方法,通常应该避免使用,因为这意味着该方法可能做得太多了。情况并非总是如此(
|
![]() |
2
26
把非引用参数看作指针,把引用参数看作双指针。这对我帮助最大。 您几乎不应该按引用传递值。我怀疑如果不是出于互操作方面的考虑,.NET团队将永远不会在原始规范中包含它。处理参考参数所解决的大多数问题的OO方法是: 对于多个返回值
对于因方法调用而在方法中更改的基元 (方法对原始参数有副作用)
|
![]() |
3
9
您可能会编写一个完整的C应用程序,并且永远不会按引用传递任何对象/结构。 我有个教授告诉我:
我同意他的建议,在我上学五年多的时间里,除了调用框架或WindowsAPI之外,我从来没有需要过它。 |
![]() |
4
3
因为接收到的是一个数组,所以您将向该数组传递一个指针。函数操作现有数据,而不更改基础位置或指针。ref关键字表示您正在将实际指针传递到位置,并在外部函数中更新该指针,因此外部函数中的值将更改。 例如,字节数组是指向同一内存的指针,在此之前和之后,内存刚刚更新。 端点引用实际上正在将指向外部函数中端点的指针更新为在函数内部生成的新实例。 |
![]() |
5
3
把ref想象成一个引用传递一个指针。不使用ref意味着您正在按值传递指针。 更好的是,忽略我刚才所说的(这可能会产生误导,尤其是对于值类型)并阅读 This MSDN page . |
![]() |
6
0
我的理解是,从对象类派生的所有对象都作为指针传递,而普通类型(int,struct)不作为指针传递,需要引用。我对字符串(它最终是从对象类派生的吗?) |
![]() |
7
0
虽然我完全同意乔恩·斯基特的答案和其他一些答案,但有一个用例可以使用
只有在优化工作达到极端水平时,这才真正有用,因为这样做会牺牲可读性,可能会牺牲可测试性和可维护性,从而节省毫秒或拆分毫秒。 |
![]() |
8
-1
基本零规则首先,在涉及类型的上下文中,原语按值(堆栈)和非原语按引用(堆)传递。 默认情况下,所涉及的参数按值传递。 很好的文章能详细解释问题。 http://yoda.arachsys.com/csharp/parameters.html
我们可以说(带有警告)非原始类型只是 指针 当我们通过裁判时,我们可以说我们已经通过了 双指针 |