2010-07-26 52 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

相关问题