2012-10-26 103 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界面。