Если я определяю структуру в С# с использованием таких автоматических свойств, как это:
public struct Address
{
public Address(string line1, string line2, string city, string state, string zip)
{
Line1 = line1;
Line2 = line2;
City = city;
State = state;
Zip = zip;
}
public string Line1 { get; protected set; }
public string Line2 { get; protected set; }
public string City { get; protected set; }
public string State { get; protected set; }
public string Zip { get; protected set; }
}
Когда я пытаюсь создать файл, я получаю ошибку компиляции, говоря The 'this' object cannot be used before all of its fields are assigned to
. Это можно решить, изменив конструктор, чтобы сделать связанный вызов конструктора по умолчанию следующим образом:
public Address(string line1, string line2, string city, string state, string zip): this()
{
Line1 = line1;
Line2 = line2;
City = city;
State = state;
Zip = zip;
}
Мой вопрос: почему это работает и что происходит? У меня есть предположение, и я попытался доказать это, посмотрев на Ил, но я только шучу, если я думаю, что могу сломать ИЛ. Но я предполагаю, что свойства auto работают, когда компилятор генерирует поля для ваших свойств за кулисами. Эти поля не могут быть доступны через код, все настройки и получение должны выполняться через свойства. При создании структуры конструктор по умолчанию не может быть явно определен. Поэтому за кулисами компилятор должен генерировать конструктор по умолчанию, который устанавливает значения полей, которые разработчик не может видеть.
Любые и все IL-мастера могут подтвердить или опровергнуть мою теорию.