为什么 .NET MailAddress 的 class 属性是只读的
Why .NET MailAddress' class properties are readonly
我想继承 MailAddress class 以使 COM 可见 class,但 MailAddress 没有无参数构造函数,而且 COM 没有将参数传递给构造函数的机制.
https://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress%28v=vs.110%29.aspx
所以,我必须像这样创建一个 class,考虑先创建它然后修改它的属性:
public class Recipient : MailAddress
{
public Recipient()
: base("")//this is the contructor that takes less parameters, but can also add the other contructor parameters here
{
}
}
但后来我意识到我不能修改它的属性,因为它们都是只读的
有人知道为什么它们是只读的吗?并且 class 附件是一样的。
MailAddress class 使用不可变模式 -- 因此实例一旦创建,就无法修改(此模式有一些好处 -- 因为除其他外,它可以提供很多帮助使用线程,因为没有锁争用问题)。
它在 Message 类型中放置的集合(to、from、cc 集合)可以修改。因此,您始终可以从其中一个中删除现有的 MailAddress 实例,然后创建一个新的 MailAddress class 并用修改后的值替换它。
希望这对您有所帮助,
我想继承 MailAddress class 以使 COM 可见 class,但 MailAddress 没有无参数构造函数,而且 COM 没有将参数传递给构造函数的机制.
https://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress%28v=vs.110%29.aspx
所以,我必须像这样创建一个 class,考虑先创建它然后修改它的属性:
public class Recipient : MailAddress
{
public Recipient()
: base("")//this is the contructor that takes less parameters, but can also add the other contructor parameters here
{
}
}
但后来我意识到我不能修改它的属性,因为它们都是只读的
有人知道为什么它们是只读的吗?并且 class 附件是一样的。
MailAddress class 使用不可变模式 -- 因此实例一旦创建,就无法修改(此模式有一些好处 -- 因为除其他外,它可以提供很多帮助使用线程,因为没有锁争用问题)。
它在 Message 类型中放置的集合(to、from、cc 集合)可以修改。因此,您始终可以从其中一个中删除现有的 MailAddress 实例,然后创建一个新的 MailAddress class 并用修改后的值替换它。
希望这对您有所帮助,