2010-07-26 62 views
2

這可能不是措辭相當正確的,但在這裏不用反正。一般代理

如果我有以下陳述;

DocumentMerger<EmailMerge> mailMerge = new DocumentMerger<EmailMerge>(); 
List<MailMessage> mailMessages = mailMerge.Process(); 

DocumentMerger<SmsMerge> mailMerge = new DocumentMerger<SmsMerge>(); 
List<SmsMessage> smsMessages = mailMerge.Process(); 

我怎樣才能創建一個通用類,需要一個類型爲通用如EmailMerge返回MAILMESSAGE兩種或SmsMessage對象的列表?

我有一個名爲DocumentMerger的類,它創建我的對象EmailMerge或SmsMerge。

我現在需要他們兩個,露出它返回的對象,如List<MaileMessage>List<SmsMessage>

自己獨特的列表的處理方法,我懷疑的代理可能是這裏的去,但不能工作的代碼。

如果您認爲不夠清楚,請重新標題這個問題。

回答

1

的接口可以解決你的問題..

public interface IDocumentMerger 
{ 
} 

public interface IOutputType 
{ 
} 

public class MailMessage : IOutputType 
{ 
} 

public class EmailMerge : IDocumentMerger 
{ 
} 

public class SmsMerge : IDocumentMerger 
{ 
} 

public class DocumentMerger<T> where T : IDocumentMerger 
{ 
    public List<IOutputType> Process() 
    { 
     IOutputType result = null; 

     if (typeof(T) == EmailMerge) 
     { 
      result = new MailMessage(); 
     } 

     // etc.. 
     // do stuff.. 

     return result; 
    } 
} 

你會使用這樣的:

var documentMerger = new DocumentMerger<EmailMerge>(); 

var emailMerge = documentMerger.Process(); 

emailMerge是List<MailMessage>類型的...

我希望我理解你的問題正確..代碼是未經測試,但應該是正確的。還是真正接近它:)

伊恩

編輯 - 看起來像我誤解您的要求..這是一個簡單的修復,但請參閱編輯。

+1

您可以擴展這個解決方案有一個適當的工廠模式,通過簡單地添加其他製造工廠類。這可以避免您的調用類中的一些開關情況和條件。 Ref:http://msdn.microsoft.com/en-us/library/ee817667.aspx – 2010-07-26 01:56:11

+0

我不是很瞭解IOutputType是什麼,因爲我得到了一個轉換錯誤result = new MailMessage();對不起,我在這裏錯過了什麼? – griegs 2010-07-26 02:54:43

+0

griegs -MailMessage應該實現IOutputType接口。 – 2010-07-26 12:09:21