CLR via C# 参数和返回类型的设计规范

声明方法的参数类型时,应尽量指定最弱的类型,宁愿要接口也不要基类。

上面代码,要写方法来处理一组数据项,最好使用接口(比如IEnumerable<T>)声明参数,而不是用强数据类型(比如List<T>)或者更强的接口类型(比如ICollection<T>或IList<T>)。

原因是调用第一个方法时可传递数组对象、List<T>对象、String对象或者其他对象------只要对象的类型实现了IEnumerable<T>接口。相反,第二个方法值允许传递List<T>对象,不接受数组或String对象。

显然,第一个方法更好,它更灵活,适合更广泛的情形。

//--

当然,如果方法需要的是列表(而非任何可枚举的对象),就应该将参数类型声明为IList<T>。

//--

注意,这里的例子讨论的是集合,是用接口体系来设计的。讨论使用基类体系结构设计的类时,概念同样适用。

第一个方法能处理任何流,包括FileStream,NetworkStream和MemoryStream等。第二个只能处理FileStream流,这限制了它的应用。

//--

相反,一般最好将方法的返回类型声明为最强的类型(防止受制于特定类型)。

//--

第一个方法是首选的,它允许方法的调用者将返回对象视为FileStream对象或者Stream对象。但第二个方法要求调用者只能将返回对象视为Stream对象。总之,要确保调用者在用方法时有尽量打的灵活性,使方法的使用范围更大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值