1. 程式人生 > >CLR via C#學習筆記-第九章-參數和返回類型的設計規範

CLR via C#學習筆記-第九章-參數和返回類型的設計規範

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#學習筆記-第九章-參數和返回類型的設計規範