Рассмотрим следующий фрагмент кода (написанный в форме для Windows Application):Передача этого по ссылке (ссылка это)
public partial class Form1
{
....
public void Caller()
{
Form1 myRef = this;
Change(ref this) //--> won't compile because *this* is read-only
Change(ref myRef); //--> compiles but doesn't work.
}
....
public void Change(ref Form1 theRef)
{
theRef = new Form1();
theRef.Text = "I am a new form";
}
}
Passing this
по ссылке не allowd. Это нормально и разумно. Но почему передача this
косвенно, как показано выше, не работает? Поскольку я знаю, передается ли параметр по ссылке, любое присваивание в вызываемом методе отражается методу вызывающего. Почему здесь не работает?
Update, чтобы сделать этот вопрос ясный
1- Я не изо всех сил, чтобы достигнуть чего-нибудь особенного. Я просто пытаюсь проверить ref
.
2- Причина, почему я неправильно понял ref
, что я совершенно забыл Form1 myRef = this
фактически копии адрес основной Form1
объект myRef
; поэтому переменная myRef
не имеет ничего общего с this
, за исключением того, что оба они указывают на один и тот же объект.
Что именно вы пытаетесь достичь здесь? – Rik
Конечно, второй вызов работает, он просто изменяет переменную 'myRef' ** ** в' Caller'. Вы не можете изменить 'this' для ссылочного типа, периода. –
Изменить это косвенно не возможно, но значение myRef будет изменено – Blau