2012-10-26 64 views
1

我有一个接口,它描述了对某些存储库中查找的某个项目执行某些操作的方法。接受通用方法参数的最佳方法

而我看到两种方式来创建该接口。

public interface IService<T> where T : class 
{ 
    void Action<TSource>(int id, TSource source, Action<T> action) 
     where TSource : IRead<T>; 
} 

public interface IService<T> where T : class 
{ 
    void Action(int id, IRead<T> source, Action<T> action); 
} 

那么,哪一个是最好的,为什么?

+0

你想在这里实现什么?问题是什么?答案完全取决于你的问题。 – Steven

+0

你有什么不同**?如果你不需要“类”约束(所以你可以接受值类型),那么它们是等价的。 –

+0

没有实际问题。然而。我像往常一样提前要求避免将来出现问题,并且对C#有更完整的了解。 – AgentFire

回答

2

我会出现在这里,并且说第二个更好。

第一个定义将允许您在Action的实现中直接使用TSource(而不是通过它必须实现的接口IRead)。现在,我可以想象得到的唯一的好处就是在你的函数签名中使用TSource,而你并没有这样做。即是这样的:

TSource MyAction<TSource>(int id, TSource source, Action<T, TSource> action) 
     where TSource : IRead<T>; // TSource is now also returned from our method 

在任何其他情况下,这将是多的MyAction的身体更好(注意,我冒昧地重命名实例方法不能与System.Action冲突),只知道和使用IRead界面。