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

nan*_*nda 4 c# generics 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();
}
Run Code Online (Sandbox Code Playgroud)

如何使用泛型转换代码?

Sim*_*ens 6

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

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

像这样:

public IPage CreateOnRequirement<TCreationType>() where TCreationType:IPage,new()
{
    return new TCreationType();            
}
Run Code Online (Sandbox Code Playgroud)