在ByRef和ByVal之间进行选择时需要考虑的事项是什么.
我理解两者之间的区别,但我不完全理解ByRef是否节省了资源,或者我们是否需要在.Net环境中担心这一点.
如果在某种情况下功能无关紧要,您如何在两者之间做出决定?
如果你有一个Bitmap对象需要传递给众多方法(大约10个),最后到一个事件,它将在它被使用后最终被处理掉,是否(性能明智)将它传递给每一个那些方法通过引用而不是值?
按值传递,对象被复制,而不是通过引用传递.
(在这种情况下,性能至关重要.应用程序需要尽可能快地运行.)
阅读哪个更快?ByVal还是ByRef?让我想知道那里的评论是否适用Strings于表现.由于字符串在传递之前被复制,因此传递字符串是不是更有效(如果被调用者不需要字符串过程的副本)ByRef?
谢谢,
CFP.
编辑:考虑一下这段代码,这让我觉得有一些副本正在进行:
Sub Main()
Dim ByValStr As String = "Hello World (ByVal)!"
Dim ByRefStr As String = "Hello World (ByRef)!"
fooval(ByValStr)
fooref(ByRefStr)
Console.WriteLine("ByVal: " & ByValStr)
Console.WriteLine("ByRef: " & ByRefStr)
Console.ReadLine()
End Sub
Sub fooval(ByVal Str As String)
Str = "foobar"
End Sub
Sub fooref(ByRef Str As String)
Str = "foobar"
End Sub
Run Code Online (Sandbox Code Playgroud)
它输出:
ByVal: Hello World (ByVal)!
ByRef: foobar
Run Code Online (Sandbox Code Playgroud) 有时,我得到了辅助方法,如:
private string generateReport(string doc, List<string> sheets, Blah blahblah)
{
//doStuff()
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中看到很多这个让我想知道我是不是在搞乱计算机内存 - 来回抛出参数.在基本层面上,这个问题通过使用类级别变量来解决,但在某些情况下,我可能是从一个类派生或使用另一个类的辅助方法.所以我的问题是:
使用引用是一个更好的选择吗?即
private string generateReport(ref string doc, ref List<string> sheets, ref Blah blahblah)
{
//doStuff()
}
Run Code Online (Sandbox Code Playgroud)
什么时候应该我不使用它(如果适用)?
谢谢.