C#如何动态转换对象?

时间:2010-05-25 09:33:36

标签: c#

我正在构建一个具有名为Mailer的属性的辅助对象。实际上,Mailer可以是System.Net.Mail.MailMessage,也可以是Mono.System.Net.Mail.MailMessage。所以我最好只想要1个邮件声明。

例如我不想要:

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

问题在于邮件程序在设计时没有属性。所以我无法编译我的代码。

如何解决这个问题,我采取了正确的方法。提前致谢

1 个答案:

答案 0 :(得分:8)

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

定义一个涵盖所需方法的接口(例如SendMail()),然后为每个实现接口的MailMessage对象编写一个简单的适配器类,并委托给特定MailMessage类上的正确方法。