新关键字的C#继承问题

时间:2019-07-16 15:39:23

标签: c# inheritance new-operator

我想覆盖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)未标记为覆盖,但是如何从扩展类中获得此行为?

1 个答案:

答案 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
        };
    }
}