Почему свойства класса.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, который заменит его измененными значениями.
Надеюсь это поможет,