使用'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对性能有好处吗?

使用'ref'c#中方法中字符串参数的关键字

当我使用这个方法时,编译器会为这个方法创建一个文本副本,对吗?

不,没有。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来传递字符串感到困惑。