Richard Deeming
Я согласен с Джоном. Обе версии компилируются примерно в один и тот же IL, так что это просто вопрос предпочтения.
Глядя на метод два, вы можете ожидать, что он сделает что-то вроде:
txtHolidayDescription.Text = string.Empty;
txtHolidayName.Text = txtHolidayDescription.Text;
txtHolidayDate.Text = txtHolidayName.Text;
Но если вы изучите скомпилированный IL, то увидите, что свойство
get
метод никогда не вызывается. Вместо этого вы просто получаете:
txtHolidayDescription.Text = string.Empty;
txtHolidayName.Text = string.Empty;
txtHolidayDate.Text = string.Empty;
Вы можете продемонстрировать это с помощью простого класса:
public class Foo
{
public string Text
{
get { throw new InvalidOperationException("Boo!"); }
set { }
}
}
static class Program
{
static void Main()
{
Foo x = new Foo();
Foo y = new Foo();
Foo z = new Foo();
x.Text = y.Text = z.Text = "Hello";
Console.WriteLine("Hooray!");
}
}
При выполнении этого кода не возникает никаких исключений, что свидетельствует о том, что
get
метод не вызывается.