CLR via C#學習筆記-第九章-參數和返回類型的設計規範
阿新 • • 發佈:2018-10-23
nbsp 其他 oid class style network ring enum 學習
9.5 參數和返回類型的設計規範
聲明方法的參數類型,應盡量指定最弱的類型,寧願要接口也不要基類。
例如寫方法來處理一組數據項,最好用接口,比如IEnumerable<T>聲明參數,而不要用強數據類型,比如List<T>或者更強的接口類型,比如ICollection<T>或IList<T>
public void ManipulateItems<T>(IEnumerable<T> collection){}
原因是調用第一個方法時可以傳遞數組對象、List<T>對象、String對象或者其他對象——只要對象的類型實現了IEnumerbale<T>接口。相反,第二個方法只允許傳遞List<T>對象。
當然,如果方法需要的是列表,而非任何可枚舉的對象,就應該將參數聲明為IList<T>。但仍然要避免將參數類型聲明為List<T>。
註意
這裏的例子討論的是集合,是用接口體系來設計的。討論使用基類體系接口設計的類時,概念同樣適用。
參數聲明選擇最弱的返回類型
例如對流中的字節進行處理的方法,可定義為以下方法。
public void ProcessBytes(Stream someStream){}
這個方法能處理任何流,包括FileStream、NetworkStream和MemoryStream等。
方法返回類型聲明為最強的返回類型
相反,一般最好是將方法的返回類型聲明為最強的類型,防止受限於特定類型
public FileStream OpenFile(){}
它允許方法的調用者將返回對象視為FileStream對象或者Stream對象。
需要修改方法內部實現選擇較弱返回類型
在不影響調用者的前提下修改方法的內部實現,前面的例子中,OpenFile方法不他可能更改內部實現來返回除FileStream之外的其他對象。
如果想保持一定靈活性,在將來更改方法返回的東西,請選擇一個較弱的返回類型
public IList<String> GetStringCollection(){}
CLR via C#學習筆記-第九章-參數和返回類型的設計規範