代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

C如何动态投射对象?

c#
  •  0
  • JL. Hans Passant  · 技术社区  · 14 年前

    我正在生成一个具有名为mailer的属性的助手对象。实际上,mailer可以是system.net.mail.mailmessage或mono.system.net.mail.mailmessage。所以我最好只需要一份邮寄声明。

    例如,我不想:

    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 回复  |  直到 14 年前
        1
  •  8
  •   Paolo    14 年前

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

    定义一个包含您需要的方法(例如sendmail())的接口,然后为每个mailmessage对象编写一个简单的适配器类,该类实现接口并委托给特定mailmessage类上的正确方法。