Почему или как работает следующий код:
var mail = new MailMessage
{
To = { "hello@abc.com" }
};
, учитывая, что оба MailMessage.To
- свойство только для чтения и оператор присваивания?
Насколько я могускажем, этот синтаксис вызывает метод Add
на MailAddressCollection
, но я не могу найти документацию, объясняющую это волшебство для MailAddressCollection
, или если он относится либо к типу Collection<T>
, который он получает, либо к интерфейсам, которые он используетнаследует.
Чтобы показать, что вышеуказанный синтаксис обрабатывается по-разному, следующие подходы дают ошибки времени компиляции, жалуясь, что свойство To
доступно только для чтения:
// Attempt 1
var mail = new MailMessage
{
To = "hello@abc.com"
};
// Attempt 2
var mail = new MailMessage();
mail.To = { "hello@abc.com" }
// Attempt 3
var mail = new MailMessage
{
To = new MailAddressCollection()
};
Я уверенСуществуют и другие примеры инициализации такого типа, но MailMessage
- это первый раз, когда я с ней столкнулся.