2010-07-26 42 views
0

我之前提過這個問題,但我不認爲我清楚地解釋了自己,所以我會再試一次。根據一般情況返回不同的列表

我有以下代碼;

public interface IDocumentMerger 
{ 
    List<???????> Process(); 
} 

public class EmailMerger : IDocumentMerger 
{ 
    public void Process() 
    { 
     return new List<MailMessage>(); 
    } 

} 

public class DocumentMerger<T> where T : IDocumentMerger 
{ 
    public T objMerger; 

    public DocumentMerger() 
    { 
     Type t = typeof(T); 
     objMerger = (T)Activator.CreateInstance(t); 
    } 

    public List<???????> Process() 
    { 
     return objMerger.Process(); 
    } 

} 

我想用上面的東西,像這樣;

DocumentMerger<EmailMerger> merger = new DocumentMerger<EmailMerger>(); 
List<MailMessage> messages = merger.Process(); 

DocumentMerger<SmsMerger> merger = new DocumentMerger<SmsMerger>(); 
List<SmsMessage> messages = merger.Process(); 

但我無法弄清楚如何返回一個類型的MAILMESSAGE列表或取決於我是否創建一個DocumentMerger通過INT要麼MailMerger或SmsMerger類型SmsMessage的列表。

回答

4

你的接口需要是通用的:

public interface IDocumentMerger<DOCTYPE> 
{ 
    List<DOCTYPE> Process(); 
} 

然後你的類需要實現泛型接口:

public class EmailMerger : IDocumentMerger<MailMessage> 
public class SMSMerger : IDocumentMerger<SmsMessage> 

我不知道爲什麼你有一個DocumentMerger類以及但這會是這樣的:

public class DocumentMerger<MERGERTYPE, DOCTYPE> where MERGERTYPE : IDocumentMerger<DOCTYPE> 

然後你的方法需要返回適當的類型:

// In EmailMerger 
public List<MailMessage> Process() 

// In SMSMerger 
public List<SmsMessage> Process() 

// In DocumentMerger 
public List<DOCTYPE> Process() 

你爲什麼不只是讓EmailMerger/SMSMerger情況下雖然,因爲DocumentMerger時(使用反射不會少)只是包裝的這些一次一個?

+0

我想創建一個工廠類型,以便您調用單個對象,並只更改了類型和返回的類型。目標是讓其他人輕鬆地致電 – griegs 2010-07-26 04:03:38

+0

如何使每個類型的新工廠比創建類型更容易? – 2010-07-26 04:39:15