2009-01-16 81 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的类型来实现。实施者应该知道期望的类型。如果泛型参数在方法上,那么实现者将不得不处理任何类型,并且消费者将没有发言权。

相关问题