使用'ref'c#中方法中字符串参数的关键字
本文关键字:参数 关键字 字符串 ref 使用 方法 | 更新日期: 2023-09-27 18:02:22
作为一个对。net管道不太了解的程序员,我想知道在c#中使用ref字符串作为参数是否对性能有好处?
假设我有一个这样的方法:
public int FindSomething(string text)
{
// Finds a char in the text and returns its index
}
当我使用这个方法时,编译器会为这个方法创建一个文本副本,对吗?
但是如果我使用ref
关键字:
public int FindSomething(ref string text)
{
// Finds a char in the text and returns its index
}
. .编译器应该只发送文本的指针地址…
那么像这样使用ref
对性能有好处吗?
当我使用这个方法时,编译器会为这个方法创建一个文本副本,对吗?
不,没有。string
是一个引用类型,编译器将创建一个新的堆栈变量,该变量指向给定内存地址中表示的相同的string
。它不会复制字符串。
当你在引用类型上使用ref
时,不会创建指向string
的指针的副本。它将简单地传递已经创建的引用。这只在您想要创建一个全新的string
:
void Main()
{
string s = "hello";
M(s);
Console.WriteLine(s);
M(ref s);
Console.WriteLine(s);
}
public void M(string s)
{
s = "this won't change the original string";
}
public void M(ref string s)
{
s = "this will change the original string";
}
那么使用这样的ref对性能有好处吗?
性能提升并不明显。会发生的情况是,其他开发人员会对为什么使用ref
来传递字符串感到困惑。