Что я получаю как разработчик, передавая аргумент ссылочного типа методу с использованием ключевого слова ref , если вы не меняете то, на что указывает ссылка?
Я прочитал оба, ключевое слово ref с параметром ссылочного типа и Какое использование ref для переменных ссылочного типа в C #? и ряд других. Я знаю, что эту тему спрашивали и отвечали очень много раз. Я считаю, что задаю уникальный вопрос. Не стесняйтесь отметить мой вопрос, если вы знаете других мудрецов.
Простой класс:
public class Person
{
public Person(string first, string last)
{
FirstName = first;
LastName = last;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return string.Format("{0} {1}", FirstName, LastName);
}
}
Передача формы с использованием ключевого слова ref:
public partial class Form2 : Form
{
private Person _person;
public Form2()
{
_person = new Person("John", "Doe");
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
textBox1.Text = _person.ToString();
base.OnLoad(e);
}
private void button1_Click(object sender, EventArgs e)
{
ChangeLastName(ref _person);
textBox2.Text = _person.ToString();
}
private static void ChangeLastName(ref Person person)
{
person.LastName = "Smith";
}
}
Параметр передачи формы без использования ключевого слова ref:
public partial class Form2 : Form
{
private Person _person;
public Form2()
{
_person = new Person("John", "Doe");
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
textBox1.Text = _person.ToString();
base.OnLoad(e);
}
private void button1_Click(object sender, EventArgs e)
{
ChangeLastName(_person);
textBox2.Text = _person.ToString();
}
private static void ChangeLastName(Person person)
{
person.LastName = "Smith";
}
}
В чем разница, если она есть, или что я как разработчик получаю от первого (кроме возможности обновлять переданный параметр внутри моего метода)?
Заранее спасибо,
ldind.ref
для косвенной загрузки адреса объекта (и даже тогда; JIT может удалить его, если сможет чтобы обнаружить, что присвоения не было) - person Sehnsucht   schedule 09.11.2015