CLR via C#学习笔记-第九章-参数和返回类型的设计规范

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(){}
原文地址:https://www.cnblogs.com/errornull/p/9833573.html