Ответ 1
Когда я использую этот метод, компилятор создает копию текста для метода, правильно?
Нет, это не так. 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
для передачи строки.