我想覆盖Body
类中的MailMessage
成员,以便它本质上具有页眉和页脚。
我已经像这样扩展了MailMessage类;
public class XMessage : MailMessage
{
private string header;
private string footer;
private string xbody;
new public string Body //hides MailMessage.Body
{
get
{
return header + xbody + footer;
}
}
////.....
}
但是,将XMessage
传递到SmtpClient
的{{1}}时,主体为空白。 .Send(MailMessage m)
未标记为覆盖,但是如何从扩展类中获得此行为?
答案 0 :(得分:3)
正如您所观察到的,方法隐藏与重写不同。由于SmtpClient.Send(MailMessage m)
期望MailMessage
,它将使用Body
类中定义的MailMessage
的实现。
正如艾米(Amy)在评论中所提到的,这种情况将更适合组合而不是继承。
一个例子:
public class XMessage
{
private string header;
private string footer;
private string xbody;
public MailMessage GetMailMessage()
{
return new MailMessage
{
Body = header + xbody + footer
// set other properties
};
}
}