2010-05-25 88 views
0

我正在構建一個名爲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; 
      } 

的問題是,郵件具有在設計時沒有屬性。所以我無法編譯我的代碼。

這是如何解決的,我採取了正確的方法。在此先感謝

回答

8

您應該使用適配器模式爲這樣的: 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