2010-07-26 5 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.

мне теперь нужно их обоих, чтобы выставить метод Process, который возвращает свой собственный уникальный список объектов, таких как 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> ...

Я надеюсь, что правильно понял ваш вопрос. Код не проверен, но должен быть правильным .. Или действительно близко к нему :)

Ian

Редактировать - похоже, я неправильно читаю ваши требования .. это легко исправить, см. Редактирование.

+1

Вы можете расширить это решение, чтобы иметь заводской шаблон на месте, просто добавив еще один класс Facotry. Это может привести к нескольким случаям переключения и условиям в вашем вызывающем классе. Ссылка: http://msdn.microsoft.com/en-us/library/ee817667.aspx –

+0

Я не очень понимаю, что такое IOutputType, потому что я получаю ошибку преобразования в result = new MailMessage(); Извините, но я что-то упустил? – griegs

+0

griegs -MailMessage должен реализовать интерфейс IOutputType. –

Смежные вопросы