2011-06-03 105 views
3

當我看到在很多地方使用了以下的模式請解釋這個模式:使用抽象方法

abstract class SimpleProvider<T> 
{ 
    public object Create(IContext context) 
    { 
     return CreateInstance(context); 
    } 

    protected abstract T CreateInstance(IContext context); 
} 

我不明白的實際差異,爲什麼它不只是寫爲:

abstract class SimpleProvider<T> 
{ 
    public abstract T Create(IContext context); 
} 

UPDATE:上面代碼段從哪裏沒有指定接口Ninject文檔拍攝,但在看ACTUA l來源我可以看到SimpleProvider<T>實現了接口IProvider,它解釋了對子呼叫的需求並回答了我的問題。

+0

有沒有公共方法的用法? – Restuta 2011-06-03 10:08:14

回答

2

所以,唯一的區別是返回類型(對象,而不是T),這意味着沒有實際的區別來電者需要演員。

我能想到的唯一原因,要做到這一點,如果他們實施其中有object Create(IContext context);

0

有如果你說的一切都是真的,你剛開免費類型安全的方法=)

1

唯一使用我看到當SimpleProvider實現接口方法Create(IContext context)將是一個接口。然後你可以從不需要知道在某些情況下可能非常重要的T的確切類型的類中使用它。

2

它爲提供程序提供編譯時類型安全性,方法是確保它創建T類型的對象,但允許類與僅適用於對象的更通用的代碼進行交互。

當使用與控制容器的反轉一起使用的工廠對象時,這很常見。

0

它保存了調用者在編譯期間必須知道T.由於公共方法與任何特定的子類實現都是分離的,因此它還使接口在整個類層次結構中保持一致。