2009-01-16 79 views
0

我有一個非常薄的界面,將定義一種方法。我是否需要類定義的類型參數?設計一個通用接口,需要類型或方法的類型參數?

public interface ISomethingFun<T> 
{ 
    void Do(T item); 
} 

或方法定義?

public interface ISomethingFun 
{ 
    void Do<T>(T item); 
} 

什麼原理?是否更容易實現,繼承或動態生成?它是風格嗎?是否有一些面向對象的指導適用?

回答

1

在方法上使用泛型的好處是它有助於類型推斷。

void Example(ISomethingFun fun) { 
    fun.Do(42); 
} 

在那裏,一個完全通用的調用,沒有泛型參數。把泛型參數的類型迫使你添加通用簽名或綁定每當所示類型的元數據

void Example2<T>(ISomethingFun<T> fun) { ... } 

這未必是壞事情,其實經常需要。這只是一個區別。

雖然在一般,如果每一個方法都有相同的通用參數,只需將其添加到類型:)

0

這只是我的直覺,但由於只有一個方法,我把它放在方法。

通過這種方式,調用者的Do> < T>不需要明確指定T.

SomethingFun fun = new SomethingFun(); 
fun.Do(DateTime.Now); 
1
  • 把它放在類如果與T的類交易。
    • 一個具體的例子:整數的列表 - 你正在尋找42
List<int> g; 
g.Find(42); 
  • 把它放在了方法,如果該類不處理T的方法,但方法。
    • 一個具體的例子:對象的列表,您正在搜索與42
ArrayList g; 
g.Find<int>(42) 
1

它應該是在界面上的值的整數。

接口的使用者應該能夠限制Do預期的類型。它只能通過限制ISomethingFun的類型來實現。實施者應該知道期望的類型。如果泛型參數在方法上,那麼實現者將不得不處理任何類型,並且消費者將沒有發言權。

相關問題