【问题标题】:Why .NET MailAddress' class properties are readonly为什么 .NET MailAddress 的类属性是只读的
【发布时间】:2015-07-10 11:59:34
【问题描述】:

我想从 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 是一样的。

【问题讨论】:

  • 不变性是一件美好的事情。 (虽然我知道这对你没有帮助......)
  • 你打算在哪里使用这个?您是否将其传递给需要 MailAddress 的方法?
  • 您可以公开一个MailAddressBuilder,并使用一个返回MailAddress 的附加方法Build()(是的,这是Builder 模式)
  • 是的,建造者模式是这里的解决方案。
  • @EBrown 当我使用参数构建类时,我想在 VB6 中使用它 public class Recipient : MailAddress { public Recipient(string address) : base(address) { } } VB6 向我显示消息“无效使用新关键字”在这句话中将 oRecipient 作为新的 SendMailSmtp.Recipient 和 VB6 显示消息“预期:语句结束”,当我尝试这个 Dim oRecipient As New SendMailSmtp.Recipient("address@domain.com")

标签: c# com default-constructor mailaddress


【解决方案1】:

MailAddress 类使用不可变模式——因此一旦创建了实例,就不能修改它(这种模式有一些好处——因为它对线程有很大帮​​助,因为有没有锁争用问题)。

可以修改它放入 Message 类型的集合(to、from、cc 集合)。因此,您始终可以从其中一个实例中删除现有的 MailAddress 实例,然后创建一个新的 MailAddress 类,将其替换为修改后的值。

希望对你有帮助,

【讨论】:

  • 我认为您错过了问题的重点,它涉及 从 COM 访问,无法将参数传递给构造函数
猜你喜欢
  • 2021-10-16
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多