Почему свойства класса.NET MailAddress доступны только для чтения

Я хочу наследовать от класса MailAddress, чтобы сделать COM видимым классом, но MailAddress не имеет конструктора без параметров, а COM не имеет механизма для передачи аргументов конструктору.

https://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress%28v=vs.110%29.aspx

поэтому я должен создать такой класс, думая только о том, чтобы создать его, а затем изменить его свойства:

public class Recipient : MailAddress
{
    public Recipient()
        : base("")//this is the contructor that takes less parameters, but can also add the other contructor parameters here
    {

    }
}

но потом я понимаю, что не могу изменить его свойства, потому что все они доступны только для чтения

Кто-нибудь знает, почему они только для чтения? и класс Attachment сделан одинаково.

1 ответ

Решение

Класс MailAddress использует неизменяемый шаблон - поэтому после создания экземпляра его нельзя изменить (есть некоторые преимущества для этого шаблона - поскольку среди прочего он может очень помочь с многопоточностью, поскольку нет конфликтов блокировки проблемы).

Коллекция, в которую он помещается по типу Message (коллекции to, from, cc), может быть изменена. Таким образом, вы всегда можете удалить существующий экземпляр MailAddress из одного из них, а затем создать новый класс MailAddress, который заменит его измененными значениями.

Надеюсь это поможет,

Другие вопросы по тегам