C#如何动态地转换对象?

C#如何动态地转换对象?

问题描述:

我正在构建一个名为Mailer的属性的助手对象。实际上,Mailer可以是System.Net.Mail.MailMessage或Mono.System.Net.Mail.MailMessage。所以我最好只想要1个邮件声明。C#如何动态地转换对象?

例如,我不想:

private Mono.Mailing.MailMessage MonoMessage = new Mono.Mailing.MailMessage(); 
private System.Net.Mail.MailMessage MailMessage = new System.Net.Mail.MailMessage(); 

我宁愿

object mailer; 

然后在构造函数中

switch (software) 
      { 
       case EnunInternalMailingSoftware.dotnet: 
        this.mailer = new System.Net.Mail.MailMessage(); 
        break; 
       case EnunInternalMailingSoftware.mono: 
        this.mailer = new Mono.Mailing.MailMessage(); 
        break; 
      } 

的问题是,邮件具有在设计时没有属性。所以我无法编译我的代码。

这是如何解决的,我采取了正确的方法。在此先感谢

您应该使用适配器模式为这样的: http://en.wikipedia.org/wiki/Adapter_pattern

定义,涵盖你所需要的方法的接口(如Sendmail的()),然后写每个MAILMESSAGE对象实现了一个简单的适配器类该接口并委派给特定MailMessage类上的正确方法。

+0

您能否提供一些基本的概述? – 2010-05-25 09:38:14

+1

@JL - 定义包含您想要调用的方法的IMailer接口。然后,创建一个MonoMailerAdapter类,实现此接口并保存可将方法调用委托给的Mono Mailer类的实例。同样为System.Net版本创建一个适配器。然后你的'对象邮件程序'字段变成'IMailer邮件程序';' – Paolo 2010-05-25 09:40:01

+0

非常感谢你 - 现在正在研究。 – 2010-05-25 09:42:48