使用Generics-C#的工厂方法模式

时间:2010-03-23 12:52:51

标签: c# design-patterns generics

我正在学习泛型。当我有一个抽象方法模式时:

//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 个答案:

答案 0 :(得分:6)

您可以使用通用签名实现该方法,然后创建传递给type参数的类型。

您必须指定new()条件。
这意味着它只接受具有空构造函数的类型。

像这样:

public IPage CreateOnRequirement<TCreationType>() where TCreationType:IPage,new()
{
    return new TCreationType();            
}