Шаблон фабричного метода с использованием Generics-C # - PullRequest
4 голосов
/ 23 марта 2010

Просто я изучаю дженерики. Когда у меня есть шаблон абстрактного метода, например:

//Abstract Product
interface IPage
{
    string pageType();
}

//Concerete Product 1
class ResumePage : IPage
{
    public string pageType()
    {
        return "Resume Page";
    }
}

//Concrete Product 2
class SummaryPage : IPage
{
  public string pageType()
  {
    return "SummaryPage";
   }
}

//Fcatory Creator
class FactoryCreator
{
   public IPage CreateOnRequirement(int i)
    {
      if (i == 1) return new ResumePage();
      else { return new SummaryPage(); }
    }
}


//Client/Consumer

void Main()
{

  FactoryCreator c = new FactoryCreator();
  IPage p;
  p = c.CreateOnRequirement(1);
  Console.WriteLine("Page Type is {0}", p.pageType());
  p = c.CreateOnRequirement(2);
  Console.WriteLine("Page Type is {0}", p.pageType());
  Console.ReadLine();
}

как конвертировать код с использованием дженериков?

1 Ответ

6 голосов
/ 23 марта 2010

Вы можете реализовать метод с общей сигнатурой, а затем создать тип, передаваемый в параметр типа.

Вы должны указать условие new().
Это означает, что оно будет принимать только те типы, которые имеют пустой конструктор.

Как это:

public IPage CreateOnRequirement<TCreationType>() where TCreationType:IPage,new()
{
    return new TCreationType();            
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...