2010-03-23 28 views
4

只是我學習Generics.When我有一個像抽象方法模式:工廠方法模式使用泛型-C#

//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(); 
} 

如何使用泛型的代碼轉換?

+2

什麼是您的最終目標是什麼?爲什麼你需要泛型? – 2010-03-23 12:54:35

+2

也許他想學習如何在工廠模式中使用泛型? – Niike2 2010-03-23 12:58:21

+0

@妮可,是的,你是對的。 – nanda 2010-03-23 13:03:40

回答

6

您可以使用通用簽名實現該方法,然後創建傳入類型參數的類型。

雖然您必須指定new()條件。
這意味着它只接受具有空構造函數的類型。

像這樣:

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

其中TCreationType:new(),IPage – Nagg 2010-03-23 12:59:54

+0

@Nagg:是的,謝謝。錯過了。 – 2010-03-23 13:02:02

+0

感謝Simon花費你的時間。 – nanda 2010-03-23 13:05:49